在JQuery中的setInterval()函数调用中的背景图像css animate()
我注意到一种我无法解释的行为。 我确信它必须是我对JQuery / JavaScript的有限知识。
当我在我的网页上运行以下代码时,一切都按预期工作 – 背景图像旋转:
//background image rotator var imgArr = new Array('/images/1.jpg', '/images/2.jpg', '/images/3.jpg'); var preloadArr = new Array(); var i; /* preload images */ for (i = 0; i < imgArr.length; i++) { preloadArr[i] = new Image(); preloadArr[i].src = imgArr[i]; } var currImg = 1; var intID = setInterval(changeImg, 5000); function changeImg() { $('#homeDiv').css({ 'background': 'url(' + preloadArr[currImg++ % preloadArr.length].src + ')' }); }
但是,如果我用.animate()
替换.css()
函数,就像在下面的代码中一样, currImg++
似乎增加2并加载了错误的图像。
//background image rotator var imgArr = new Array('/images/1.jpg', '/images/2.jpg', '/images/3.jpg'); var preloadArr = new Array(); var i; /* preload images */ for (i = 0; i < imgArr.length; i++) { preloadArr[i] = new Image(); preloadArr[i].src = imgArr[i]; } var currImg = 1; var intID = setInterval(changeImg, 5000); function changeImg() { $('#homeDiv').animate({ 'background': 'url(' + preloadArr[currImg++ % preloadArr.length].src + ')' }, 1000); }
是否由于setInterval
进程因为animate()
函数需要1000毫秒而“失去同步”?
谢谢
亚历克斯
删除setInterval并编写如下代码
function changeImg() { $('#homeDiv').delay(5000).animate({ 'background': 'url(' + preloadArr[currImg++ % preloadArr.length].src + ')' }, 1000, function() { changeImg();} ); }
就像你说的那样,setInterval与animate函数异步。 在这里chaneImg每次完成自身时都会再次作为回调函数运行。