同步异步问题
为什么这里要使用setTimeout让下面的程序异步执行才会正常,去掉setTimeout就会有问题?
照理说直接移除transition后,指定index值的图片瞬间定位好,马上加上transition再进行move()操作也是可以的啊,代码不是按顺序执行下来的吗?
请老师详细解释下?
正在回答
同学你好,代码是顺序执行的,也就是同步执行。这里需要设置定时器的原因,会涉及到同学现在还没有学过的概念,这个不需要了解太深,简单的知道一下即可。具体参考如下:
js执行时,从上往下顺序执行代码。先执行同步的代码,如果执行的代码有异步的,先不执行,而是放在一个队列当中。等同步的代码执行完毕,再按照顺序执行队列里面的异步代码。
所以本案例中,代码正在执行的时候,浏览器不会渲染动画(所有的动画都是异步的)。而是等同步的代码执行完毕,才开始渲染动画。也就是如下设置left并不是立马执行,是等待后面所有同步的代码执行完毕,才会去渲染往左移动的动画。在渲染动画时,transition已经添加上了,所以还是会有动画效果。
因为定时器是异步执行的,所以这里给后面的代码放在定时器中,让前面的left动画效果先执行,然后再去执行定时器中的代码,添加过渡样式。
可以写一个小例子感受一下:
因为浏览器在代码执行过程中不渲染动画,等同步代码执行完毕,再去渲染,所以虽然过渡样式在后面添加的,但是前面的动画还是会有过渡效果
加一个定时器就好了
祝学习愉快~
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星