【发布时间】:2019-05-22 03:35:23
【问题描述】:
情况
我有一个在按钮单击时调用的函数,它应该绘制一个动画图表,每 2 秒更新一次图表。当用户再次单击该按钮时,动画仍在运行,动画应该停止。
我目前的解决方案
现在我有以下脚本可以在视觉上停止动画,但底层的 for 循环会一直持续到后台结束:
var animRun = false;
$("#animateButton").on("click", function() {
if (animRun === false) {
redraw(data.slice(0,30))
//some CSS...
} else {
//Some CSS...
animRun = false;
}
});
function redraw(data) {
animRun = true;
for (var i=0; i<data.length;i++){
(function(i){
setTimeout(function(){
if(animRun === true) {
//draw the chart
return draw(data[i])
}
},2000*(i))
if (i === data.length -1) {
//reset animRun
if(animRun === true) {
//Some CSS things
//...
animRun = false;
}
}
})(i);
}
}
问题
当用户在动画仍在执行时再次单击按钮时,停止 for 循环的正确方法是什么?
【问题讨论】:
-
所以不可能?有什么解决方法?
-
我使用的动画是用 d3.js 库制作的......在我的例子中,我实际上停止了动画,因为变量
animRun在第二次点击时被设置为false,因此draw()函数未执行 -
说真的,经过一些重大的重写,您应该为此目的使用requestAnimationFrame。
标签: javascript for-loop settimeout