Javascript 将对象传递给for循环
我有一个for循环,它通过一个数据属性在一组li中运行 我希望每个Lis组都有一个交错的淡入。在我将动画放入Javascript 将对象传递给for循环,javascript,jquery,Javascript,Jquery,我有一个for循环,它通过一个数据属性在一组li中运行 我希望每个Lis组都有一个交错的淡入。在我将动画放入setTimeout之前,这一切都很正常。它不是在每个li中循环,而是停留在数字5上 JS: 这是我console.log(thisLi)时的色度日志在设置超时内:
setTimeout
之前,这一切都很正常。它不是在每个li中循环,而是停留在数字5上
JS:
这是我console.log(thisLi)时的色度日志代码>在设置超时内
:
…李>
,
…李>
]
执行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=0;i<6;i++)的{
(职能(一){
var thisLi=$(“li[数据顺序=”“+i+”]);
setTimeout(函数(){
TweenMax.to(thisLi,0.4,{css:{opacity:1}});
},200*i);
}(i) );
}
旁注:如果您没有在其他地方声明i
,则它正在泄漏到全局范围。执行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=0;i<6;i++)的{
(职能(一){
var thisLi=$(“li[数据顺序=”“+i+”]);
setTimeout(函数(){
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);
我认为变量thisLi的范围有问题。请尝试创建如下闭包:
var thisLi = $("li[data-order='"+i+"']");
var f = function() {TweenMax.to(thisLi,0.4, {css:{opacity:1}});};
setTimeout(f,i*200);
@FrankAstin-什么意思?阻止它泄漏到全局空间?哦,只要用var
声明它。你几乎总是应该用var
语句声明变量。例如var i=0;
我说的i
变量就是for
循环中的变量。这就是泄漏到全局范围的。因此,您需要(var i=0;i<6;i++)的
。闭包中的i
没有泄漏,因为它只是一个函数的参数。@FrankAstin-你是什么意思?阻止它泄漏到全局空间?哦,只要用var
声明它。你几乎总是应该用var
语句声明变量。例如var i=0;
i
variabl我所说的e是for
循环中的一个。这就是泄漏到全局范围的内容。因此,您需要for(var I=0;I<6;I++)
。闭包中的I
没有泄漏,因为它只是函数的一个参数。
var thisLi = $("li[data-order='"+i+"']");
var f = function() {TweenMax.to(thisLi,0.4, {css:{opacity:1}});};
setTimeout(f,i*200);