for(var j=-370;j<0;j++)
{
var up=setTimeout(function(){
document.getElementById("kf").style.bottom=j+'px';
},1000)
}
这个意思不应该是每隔一秒从-370向上提高1像素的高度
完成整个向上滑动的过程一共370秒么
为什么没有中间370秒的过程,模块的bottom直接隔一秒就到了0px;
是同事启动了370个计时器,然后技术同时执行document.getElementById("kf").style.bottom=j+'px';这个代码,由于j变量作用域的问题,j已经变为0了。你要有动画效果,应该一个执行完毕后再继续执行,不能直接for
因为你的是未来执行,但是闭包中的i在定义之初就已经变成0了,所以当真正执行到的时候,i已经为0了;
写个等价的给你吧;
var j = -370;
var obj = document.getElementById("kf");
var key = setInterval(function(){
if(j == -1) clearInterval(key);
obj.style.bottom=j+'px';
}, 1000);
我觉得是因为setTimeout(function(){},1000)是让你设置的函数体在1s后执行,而你设置的变量j在这个setTimeout函数执行前就已经加到0了,所以会有你说的那种执行结果。