启动多个setInterval失败
Fail to launch multiple setInterval
我正在构建一个函数来定期更新HTML节点的后台位置。该函数适用于单个节点,但在多个节点上调用时(在下面的示例中),只有最后一个节点受此函数的影响。
根据函数中的alert(index),对每个节点调用setInverval()。
我不明白为什么它不生效。
http://jsfiddle.net/GqNgs/1/var bgImgAnimate = function (settings) {
$.each(settings.nodeList, function (index, node) {
thisNode = $(node);
var thisPosition;
setInterval(function () {
alert(index);
//calculate the position before position the image
thisPosition = - settings.frameWidth * settings.currentFrame;
thisNode.css('backgroundPosition', (thisPosition + 'px') + ' ' + (settings.verticalPos + 'px'));
}, settings.interval);
});
};
var settings = {
nodeList: $('#star1, #star2, #star3'),
verticalPos: 0,
currentFrame: 1,
frameWidth: 26,
startTime: 2,
frameNumber: 10,
interval: 200
}
bgImgAnimate(settings);
你的变量thisNode
是全局的,所以一旦你执行你的函数,你快速循环通过所有三个元素(你称之为节点),但当这完成后,所有三个函数将执行间隔将引用单个元素(因此只有一个将被改变,你的警报显示给你正确的答案,因为每个警报引用不同的和正确的范围index
值)。
简单修复,修改:
thisNode = $(node);
:
var thisNode = $(node);
http://jsfiddle.net/GqNgs/2/顺便说一句,只设置一个间隔函数可能会更具可伸缩性,并且每次调用它时都会在所有元素上移动背景(或进行任何您想要的操作),而不是为每个元素设置间隔。
这是因为你迭代nodeList和你分配thisNode每次,然后你把它传递给间隔。但是发生的是thisNode被重写了三次(在循环之后,它指的是最后一个节点)和 after 三个间隔都用相同的thisNode变量执行,此时是最后一个节点。
相关文章:
- node.js:setInterval()正在跳过调用
- 当json解析空响应时,Whatwg-Fetch失败,我该如何防止它
- JsFiddle在分叉后描述失败
- setInterval和clearInterval javascript无法按需工作
- Don'我不明白为什么我的setInterval+jQuery;不起作用
- setInterval游戏循环的范围问题
- 为什么不'当单元测试出现解析错误时,我的因果报应测试会失败
- 当一些承诺失败时,如何继续使用$q.all()
- JavaScript setInterval problems
- 失败:等待Protractor与页面同步时出错:“”;在窗口上找不到角度”;
- 在Jquery中单击传播失败
- 网页上失败的javascript会导致所有其他脚本失败
- 带有对象解析的响应javascript ajax失败
- 一台特定计算机的Ajax请求数据未定义/失败
- 如何在Javascript中延迟setInterval
- 如何执行相同的setInterval()
- Nodejs服务器:加载资源失败:服务器的响应状态为404(未找到)
- SetInterval在javascript对象中表现怪异
- addEventListener和setInterval在Greasemonkey脚本中静默失败
- 启动多个setInterval失败