将对象传递给 for 循环
passing object to for loop
我有一个 for 循环,它通过数据属性运行一系列 li。
我希望每组 Lis 都有一个交错的淡入。 这工作正常,直到我将动画放入setTimeout
.它不是循环遍历每个 li,而是粘在数字 5 上。
.JS:
for (i=0;i<6;i++) {
console.log(thisI);
var thisLi = $("li[data-order='"+i+"']");
setTimeout(function() {
TweenMax.to(thisLi,0.4, {css:{opacity:1}});
},200*i);
}
HTMl
<li data-order="1">sometext</li>
<li data-order="1">sometext</li>
<li data-order="2">sometext</li>
<li data-order="3">sometext</li>
<li data-order="2">sometext</li>
<li data-order="3">sometext</li>
.CSS
li {
opacity:0;
}
这是我在setTimeout
内console.log(thisLi);
时的chromes日志:
<li data-order="5" style="opacity: 0.11640000000000006; ">…</li>
,
<li data-order="5" style="opacity: 0.11640000000000006; ">…</li>
]
当setTimeout
回调执行时,循环已经完成,因此i
已达到最大值。您可以使用闭包在每次迭代时捕获i
的值:
for (i = 0; i < 6; i++) {
(function (i) {
var thisLi = $("li[data-order='" + i + "']");
setTimeout(function () {
TweenMax.to(thisLi, 0.4, { css: { opacity:1 } });
}, 200 * i);
}(i));
}
旁注:如果您没有在其他地方声明i
,那么它就会泄漏到全局范围内。
我认为您对变量thisLi的范围有问题。尝试创建这样的闭包:
var thisLi = $("li[data-order='"+i+"']");
var f = function() {TweenMax.to(thisLi,0.4, {css:{opacity:1}});};
setTimeout(f,i*200);
相关文章:
- 为什么JavaScript在for循环为3时向所有4发出警报
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 我的javascript for循环不起作用
- For循环冻结Javascript
- 如何在for循环中添加事件侦听器
- 双“for”循环(循环)
- javascript for循环不起作用
- for循环中的javascript if语句找不到==
- Javascript在for循环中等待处理请求
- For循环在Jquery中只运行一次
- 如何在for循环中使用计数器
- for循环中的JavaScript闭包
- 为什么我们在ES2015中需要一个新的for循环结构,而我们已经有了for、forEach
- For循环在调用时未运行
- 如何使用for循环添加所有按钮'单击事件
- 如何更改在for循环中生成的圆的位置
- 为什么这个For循环会使浏览器实验室崩溃
- 为什么我使用javascript获得了一个无限的for循环
- 在for循环中使用多维数组设置google.maps.Marker图标
- 如何在angularJS中运行for循环而不使用html标记