UNPKG

tnt.board

Version:

TnT track-based board display

85 lines (74 loc) 2.35 kB
var spinner = function () { // var n = 0; var sp_elem; var sp = {}; sp.on = function () { var track = this; if (!track.spinner) { track.spinner = 1; } else { track.spinner++; } if (track.spinner==1) { var container = track.g; var bgColor = track.color(); sp_elem = container .append("svg") .attr("class", "tnt_spinner") .attr("width", "30px") .attr("height", "30px") .attr("xmls", "http://www.w3.org/2000/svg") .attr("viewBox", "0 0 100 100") .attr("preserveAspectRatio", "xMidYMid"); sp_elem .append("rect") .attr("x", '0') .attr("y", '0') .attr("width", "100") .attr("height", "100") .attr("rx", '50') .attr("ry", '50') .attr("fill", bgColor); //.attr("opacity", 0.6); for (var i=0; i<12; i++) { tick(sp_elem, i, bgColor); } } else if (track.spinner>0){ // Move the spinner to front var node = sp_elem.node(); if (node.parentNode) { node.parentNode.appendChild(node); } } }; sp.off = function () { var track = this; track.spinner--; if (!track.spinner) { var container = track.g; container.selectAll(".tnt_spinner") .remove(); } }; function tick (elem, i, bgColor) { elem .append("rect") .attr("x", "46.5") .attr("y", '40') .attr("width", "7") .attr("height", "20") .attr("rx", "5") .attr("ry", "5") .attr("fill", d3.rgb(bgColor).darker(2)) .attr("transform", "rotate(" + (360/12)*i + " 50 50) translate(0 -30)") .append("animate") .attr("attributeName", "opacity") .attr("from", "1") .attr("to", "0") .attr("dur", "1s") .attr("begin", (1/12)*i + "s") .attr("repeatCount", "indefinite"); } return sp; }; module.exports = exports = spinner;