我有一些与此类似的代码,它在一些图像中移动......它可以工作,但它似乎不尊重计时器
var i = 1;
var indexArray = array(1,2,3);
var timerx = new Array();
$( indexArray ).each(function( indexArraykey ) {
function internalCallback ( i, indexArraykey ) {
val = indexArray[indexArraykey];
console.log("test " + i + val);
});
timerx[i] = setTimeout( internalCallback( i, indexArraykey ), i * 500000 );
i++;
});
答案 0 :(得分:4)
几点:
i
在调用回调时具有循环结束的值。$.each(array,
,而不是$(array).each(
所以看来你想要的实际上是这样的:
var indexArray = array(1,2,3);
var timerx = [];
$.each(indexArray, function( indexArrayValue, i ) {
timerx.push(setTimeout(function(){
console.log("test " + i + ' : ' + indexArrayValue);
}, (i+1) * 500000));
});
答案 1 :(得分:1)
这是如此糟糕的设计,除了完全反js模式,甚至超越...... 为什么要一遍又一遍地定义相同的功能!!!
$(imgNumArray).each(function (indexArraykey) {
(function (i) {
timerx[i] = setTimeout(internalCallback(i, indexArraykey), i * 500000);
})(i++);
});
function internalCallback(i, indexArraykey) {
val = indexArray[indexArraykey];
console.log("test " + i + val);
}
答案 2 :(得分:1)
我不是javascript专家,但看起来像internalCallback
被调用而不是作为函数传递给setTimeout
。
试试这个:
var i = 1;
var indexArray = [3,6,9];
var timerx = new Array();
$( indexArray ).each(function( indexArraykey ) {
function internalCallback ( i, indexArraykey ) {
return function () {
val = indexArray[indexArraykey];
console.log("test " + i + val);
}
}
timerx[i] = setTimeout( internalCallback( i, indexArraykey ), i * 5000);
i++;
});
这里是小提琴http://jsfiddle.net/Guxdz/2/(查看控制台日志)