Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript For循环在D3.js中不起作用_Javascript_For Loop_D3.js - Fatal编程技术网

Javascript For循环在D3.js中不起作用

Javascript For循环在D3.js中不起作用,javascript,for-loop,d3.js,Javascript,For Loop,D3.js,我不熟悉Javascript和D3.js,并尝试在for循环中连续更改圆圈元素。 它的意思是每秒钟改变一次圆的半径,但结果是半径只是跳到了50,忽略了26到49 这是我的密码 <!DOCTYPE html> <meta charset="utf-8"> <style> </style> <body> <script src="//d3js.org/d3.v3.min.js" charset="utf-8"></scr

我不熟悉Javascript和D3.js,并尝试在for循环中连续更改圆圈元素。 它的意思是每秒钟改变一次圆的半径,但结果是半径只是跳到了50,忽略了26到49

这是我的密码

<!DOCTYPE html>
<meta charset="utf-8">
<style>

</style>
<body>
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="//d3js.org/topojson.v1.min.js"></script>
<script>
    var width = 960,
            height = 1160;
    var svg = d3.select("body").append("svg")
            .attr("width", width)
            .attr("height", height);

    svg.append("circle").attr("cx", 100).attr("cy", 100).attr("r", 25).style("fill", "purple").attr('id','cc');

    for(i=26;i<=50;i++){
        var now=d3.select('#cc');
        now.transition().duration(1000).attr("r",i);
    }
</script>

可变宽度=960,
高度=1160;
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
svg.append(“circle”).attr(“cx”,100).attr(“cy”,100).attr(“r”,25).style(“fill”,“purple”).attr('id','cc');

for(i=26;i问题是for循环只是立即迭代所有这些更改。每次调用
transition
之间需要等待1秒。类似的方法应该可以工作,但在当前转换结束后,
d3
可能有更好的方法来做些什么

function changeRadius(i) {
    d3.select('#cc').transition().duration(1000).attr("r", i);

    // "loop" by calling ourselves 1 second later with the next radius
    if (i < 50) {
        window.setTimeout(function () {
            changeRadius(i + 1);
        }, 1000);
    }
}
// first change
changeRadius(26);
函数变换半径(i){
d3.选择('#cc').transition().duration(1000).attr(“r”,i);
//“循环”通过在1秒后用下一个半径呼叫我们自己
如果(i<50){
setTimeout(函数(){
改变半径(i+1);
}, 1000);
}
}
//第一次改变
改变半径(26);
现在来看,我认为这可能有效:

var current = d3.select('#cc');
for (var i = 26; i <= 50; i++) {
    current = current.transition().duration(1000).attr("r", i);
}
var-current=d3.选择('#cc');

对于JavaScript中的(var i=26;i,当您说:


对于(i=26;i而不是创建多个过渡或干扰延迟,您可以在半径之间进行切换


谢谢你的解释,我现在明白了问题所在:“很高兴我能帮上忙。你可以考虑接受/接受这个答案,因为这就是StAcExpBooT的工作原理:您好,我已经投票了,它告诉我‘谢谢您的反馈!记录了声誉低于15的人的投票,但不要更改公开显示的帖子分数。’我点击了绿色按钮√ 在左边,是接受的权利吗?谢谢:)期待您成为社区的积极成员!
d3.select('#cc')
  .transition()
  .duration(25*1000)
  .attrTween('r', function() {
      return d3.interpolateNumber(25, 50)
  })