同步异步问题

同步异步问题

http://img1.sycdn.imooc.com//climg/5f945a77098eb2a011030248.jpg
为什么这里要使用setTimeout让下面的程序异步执行才会正常,去掉setTimeout就会有问题?

照理说直接移除transition后,指定index值的图片瞬间定位好,马上加上transition再进行move()操作也是可以的啊,代码不是按顺序执行下来的吗?

请老师详细解释下?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,代码是顺序执行的,也就是同步执行。这里需要设置定时器的原因,会涉及到同学现在还没有学过的概念,这个不需要了解太深,简单的知道一下即可。具体参考如下:

js执行时,从上往下顺序执行代码。先执行同步的代码,如果执行的代码有异步的,先不执行,而是放在一个队列当中。等同步的代码执行完毕,再按照顺序执行队列里面的异步代码。

所以本案例中,代码正在执行的时候,浏览器不会渲染动画(所有的动画都是异步的)。而是等同步的代码执行完毕,才开始渲染动画。也就是如下设置left并不是立马执行,是等待后面所有同步的代码执行完毕,才会去渲染往左移动的动画。在渲染动画时,transition已经添加上了,所以还是会有动画效果。

http://img1.sycdn.imooc.com//climg/5f953ef40979ae2e05300065.jpg

因为定时器是异步执行的,所以这里给后面的代码放在定时器中,让前面的left动画效果先执行,然后再去执行定时器中的代码,添加过渡样式。

可以写一个小例子感受一下:

因为浏览器在代码执行过程中不渲染动画,等同步代码执行完毕,再去渲染,所以虽然过渡样式在后面添加的,但是前面的动画还是会有过渡效果


http://img1.sycdn.imooc.com//climg/5f954254092fcf8a05950521.jpg

加一个定时器就好了

http://img1.sycdn.imooc.com//climg/5f95427c099fe7b005470501.jpg


祝学习愉快~


  • 人生的起源 提问者 #1
    讲得很好,谢谢!
    2020-10-25 17:39:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师