所以,这是我的问题......我在一个函数中有一个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循环再次出现并且&#34; i&#34;是不同的。
答案 0 :(得分:0)
请参阅jQuery: Wait/Delay 1 second without executing code
你试过了吗?
setTimeout(function (){
flare1array[i].rotation.z += 0.01;
}, 10);
答案 1 :(得分:0)
如何使用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);
setInterval
会返回id
,稍后可以传递给clearInterval
,以防止该操作无限期地继续。在这里,我将一个计数器变量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);
}