Javascript For循环在D3.js中不起作用
我不熟悉Javascript和D3.js,并尝试在for循环中连续更改圆圈元素。 它的意思是每秒钟改变一次圆的半径,但结果是半径只是跳到了50,忽略了26到49 这是我的密码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
<!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)
})