关于setTimeout延迟时间为0

在用html5做动画的过程中,我们一般都会遇到一些奇怪的问题,然后我们使用了

setTimeout(function(){//code}, 0); 

竟然好使了,哈哈

好用就行了,测试都通过,也不用去想为什么,但是上周做单位的项目,我整理了一套动画架构(比直接抄袭好一点,呵呵),都已经上线了,我无意中发现了一个ios上执行动画的bug,测试了一个下午,最后用

setTimeout(function(){//code}, 0);

解决了,这已经不是第一次遇到这个问题了,应该思考一下是为什么了,好,切入正题

javascript的执行分两个阶段,分先后执行

1 代码执行阶段

2 事件和队列阶段(

参考 John Resig的How JavaScript Timers Work

原文 http://ejohn.org/blog/how-javascript-timers-work/

原文加翻译 http://www.51094.com/?p=315

)

测试发现setTimeout应该是在第2阶段队列里执行的,代码说话

<script type="text/javascript">
setTimeout(function(){console.log('queue');}, 0);
console.log('a')
</script>

执行结果

a

queue

我猜测ios的动画是放在队列里执行的,我的代码

1,el1.style.webkitAnimation =  "ant1  0.3s ease-out";
2,el2.style.webkitAnimation =  "ant2  0.3s ease-out";
3,el2.style.display = "block";

el2.style.display = "block";

在 1,2句之前执行,

导致动画没有执行,el2就显示出来,bug出现了,这里有一个时间差,代码块执行到队列执行的时间,这个我们是可以感知的

使用

setTimeout(function(){

el2.style.display = "block";

}, 0);

相当于把

el2.style.display = "block";

也放在对队列中,1,2,3都在队列中执行,动画变得顺畅,ok


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值