用js源码做出缓动效果,关于for循环和settimeout

html部分<body><divid="test"></div></body>style部分<style>#test{width:100%;height:200px;po... html部分
<body>
<div id="test">
</div>
</body>

style部分
<style>
#test{width:100%;height:200px;position:absolute;bottom:0;border:1px solid red;}
</style>

js部分
<script type="text/javascript">

var div = document.getElementById("test");
div.onclick = function(){
var style = window.getComputedStyle(div,null),
bottom = style.getPropertyValue('bottom');
for(var i=0;i<=200;i++){
setTimeout(function(){
bottom = parseFloat(bottom) + 1;
div.style.bottom = bottom + "px";
},25*i);
};
};
</script>
在一开始的时候,settimeout函数的时间间隔用的是25,但是得不到效果,后来我鬼使神猜的改成,25*i,结果缓慢移动的效果出来了,谁能解释一下这是为什么。
展开
 我来答
yugi111
推荐于2016-06-03 · TA获得超过8.1万个赞
知道大有可为答主
回答量:5.1万
采纳率:70%
帮助的人:1.3亿
展开全部
因为你定义了200个定时器

从第一个到最后一个定时器
每个休息的时间是i的25倍
而i从0到200改变
因此
定时器的休息时间越来越久
于是看得到移动的效果
不然就一起移动了,看不到效果,因为都是最后的那个200
追问
我百度找了一些资料,据说for循环里面的settimeout函数,执行循环是不需要等settimeout函数里面的那个时间间隔的,也就是说定时器几乎是瞬间同时形成,瞬间同时执行。按照这样的理解对吗?此外,总感觉这段代码效率有点低,上面的代码如果要优化的话,应该怎么做呢?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式