我发现老师为了实现动画效果,一共分了三个步骤
步骤1老师最开始是在外层加了一个v-show,然后通过Popupvisible同时控制外层和内层(transitions内层),这个时候进入的动画是好的,出去的动画不对
步骤2然后(8-13节 视频21分20秒)老师通过了两个字段,popupVisible和visible分别控制外层和内层的显示,并且使用了延迟,并且老师把v-show改成了v-if(8-13节 视频22分13秒)让出场的动画成功执行,但这个时候入场动画出了问题
步骤3(视频的8-13节 23分40秒) https://coding.imooc.com/learn/questiondetail/104926.html 老师使用了一个setTimeout,成功让入场动画执行,可能正如这里同学回答一样,触发了浏览器重绘。
这里我有一些问题,
第一个问题:为什么步骤1的时候入场动画执行没问题,但步骤2的时候出场动画执行就有问题了,这里跟v-show 改成v-if后带来的影响有关吗?
第二个问题:步骤2中老师解决了出场动画的问题,是否跟我理解的一样,老师的代码实现了外层的display延迟消失,这样就不影响内层动画的执行?
第三个问题:步骤3中老师为何使用了setTimeout之后,入场动画就能执行?是否跟浏览器的重绘有关,如果是这里为什么要用浏览器的重绘呢,具体的作用是什么?为什么不重绘,入场动画就不执行? 如果跟浏览器重绘无关,那这又是什么原理呢?
问题比较多,描述可能也不够清晰,但还是希望老师能给予解答,有关vue动画和重绘相关知识等资料非常少,这个问题也困扰了我很久,谢谢老师。