我想更改元素的宽度以进行简单的动画 这是代码:
function mysildeDown(elem) {
var fullw = parseInt(getStyle(elem, 'width'));
elem.style['width'] = 0;
for (var j=0; j < 100; j++) {
(function () {
**var i=j;**
setTimeout(function () {
elem.style['width'] = (i / 100) * fullw + 'px';
}, (i + 1) * 10 );
})();
}
}
// GetStyle函数没问题 我想知道为什么我应该使用var i = j,非常感谢
答案 0 :(得分:2)
通常在循环内部执行此类操作,并在另一个函数中使用j的值时,该函数始终以j的最后一个值结束。因此,您需要找到一种方法来使用j的值,就像在循环中创建该函数时那样。
我通常看到的方法是将其作为参数传递给立即调用的函数,如下所示。
function mysildeDown(elem){
var fullw=parseInt(getStyle(elem,'width'));
elem.style['width']=0;
for(var j=0;j<100;j++){
(function(i){
setTimeout(function(){
elem.style['width']= (i/100)*fullw+'px';
},(i+1)*10)
})(j);
}
}
答案 1 :(得分:0)
在javascript中定义变量时使用var
关键字在当前代码行的范围内声明它。在您的特定情况下,如果您在声明变量var
时没有使用i
关键字,那么i
将是全局的,可能会导致问题,因为它在for
中非常常见循环。
通过在函数内部使用var
关键字,您的变量i
是函数的本地变量,并且在该函数的范围之外无法访问。
有一些好消息here。
答案 2 :(得分:0)
因此,在调用setTimeout时,我将在计时器函数中具有j的值。基本上,您存储定时器触发时要使用的j的值。