延迟循环中d3元素的加载

时间:2014-11-17 20:55:03

标签: javascript jquery d3.js

这个小提琴延迟加载一行:

http://jsfiddle.net/Qh9X5/3557/

这可以按预期工作。我试图多次加载这一行,所以我替换:

drawLine();

while(true)
  drawLine();

但是为什么这会导致函数drawLine()不断被调用而忽略延迟。如何修改小提琴代码,以便不会延迟调用该函数?

小提琴代码:

drawLine();

function drawLine(){
var svgContainer = d3.select("body").append("svg")
                .attr("width", 1200)
                .attr("height", 1200)
                .attr("text-align", "center");    

var labelLine = svgContainer.append("line")
                .attr("x1", 10)
                .attr("y1", 10)
                .attr("x2", 30)
                .attr("y2", 30)
                .attr("stroke-width", 2)
                .attr("stroke", "black")
                 .style("visibility", "hidden")
                .transition()
                .delay(1500)
                .style("visibility", "visible")
}

2 个答案:

答案 0 :(得分:0)

while(true) drawLine();是一个无限循环,当浏览器延迟堆积时会使浏览器崩溃。尝试限制数字:var i = 10; while(i--) drawLine();

注意,由于计算机速度很快,所有行都将在几乎相同的时间绘制 - 即运行脚本后1.5秒。如果您想按顺序绘制它们,请尝试设置超时,并增加延迟。

答案 1 :(得分:0)

.delay(1500)是非阻塞的,因此你循环将连续调用drawline()而不会有任何延迟。您要找的是timeout

function drawline(){
  //your stuff
  setTimeout(drawline, 1500);
}