对于没有setTimeout的循环延迟
For Loop Delay Without setTimeout
所以,这是我的问题。。。我在一个函数中有一个for循环
var fan1 = function () {
for(var i=0; i<flare1base.length; i++) {
for(var i=0; i<200; i++)
flare1base.rotation.z += 0.01;
};
};
它应该基本上做到这一点,相当简单,但是。。。我需要它等待10毫秒,然后再添加到旋转中。问题是,我不认为我可以使用setTimeout,或者只使用setInterval而不是整个for循环,因为它作用于数组中的一个对象,如果我使用
f1 = setInterval("flare1array[i].rotation.z += 0.01",10);
setTimeout("clearInterval(f1)",2000);
它排队执行一个动作来旋转物体,但当动作发生时,for循环又开始了,"i"不同了。
参见jQuery:等待/延迟1秒而不执行代码
你试过吗:
setTimeout(function (){
flare1array[i].rotation.z += 0.01;
}, 10);
先使用setInterval
,然后使用clearInterval
怎么样?你可以这样做:
function rotate(max) {
var i = 0;
return function () {
flare1base.rotation.z += 0.01;
if (++i == max) clearInterval(id);
}
}
var id = setInterval(rotate(200), 10);
JSFiddle 上的类似示例
CCD_ 3返回CCD_ 4,该CCD_。在这里,我将一个计数器变量i
封装在一个闭包中,它跟踪内部函数被调用的次数。当它被调用max
次时,它就会停止。
顺便说一句,如果你知道flare1base.rotation.z
的起始值是多少,那么每次调用函数时最好重新计算,而不是连续添加0.01
,因为重复浮点添加的结果可能不精确。例如,如果您知道它从开始,则可以执行flare1base.rotation.z = 0.01 * ++i;
(并从if
语句中删除增量(。
要将其扩展到一组项,可以将整个过程封装在一个循环中。假设你的物品在一个数组arr
:中
function rotate(arr, idx, max) {
var i = 0;
return function () {
arr[idx] += 0.01;
if (++i == max) clearInterval(ids[idx]);
}
}
var ids = new Array(5);
for (var i = 0; i < 5; ++i) {
ids[i] = setInterval(rotate(arr, i, 200), 10);
}
更新的JSFiddle
相关文章:
- 带有延迟的循环每次应运行5次
- jQuery延迟了ajax调用的循环
- jQuery通过步骤的自排队循环来解决延迟问题
- Javascript:延迟在html5画布上循环绘制
- 如何在Javascript中延迟for循环执行
- 使循环滑块具有延迟
- 循环中的多个 JavaScript 延迟
- jquery .each 循环来执行每个数组项,它们之间有延迟
- foreach循环每次迭代之间的延迟
- 在javascript for循环的迭代之间应用延迟
- 在延迟时运行javascript for循环
- 将for循环从完成延迟到返回API调用
- jquery在循环中延迟
- 如何通过宽松来增加javascript循环延迟
- 对于下一次迭代之前的循环延迟
- JQuery中的循环延迟
- 对于没有setTimeout的循环延迟
- 循环延迟超时问题
- 循环延迟
- 对话框 ajax 加载动画效果 - 需要循环延迟、睡眠