animation动画不生效_为什么CSS动画应用到新创建dom不起作用?

以下均为个人理解,如有错误还请批评指正!

看到题主的问题,我首先联想到了zepto。它里面的animate函数也是基于css3过渡动画实现的。

zepto的fx模块源码,有一句代码很关键。

// trigger page reflow so new elements can animatethis.size() && this.get(0).clientLeft

这段代码调用元素的clientLeft以触发页面回流,使得添加的css动画得以生效。经过尝试可以发现,将相同的方法应用到题主的代码上,动画也可以正常显示。但这个过程中究竟发生了什么呢?

首先,js执行进程和浏览器渲染进程互斥(体现到这里就是DOM插入和CSS样式操作会合并计算),这可以理解为浏览器的一种优化策略。因此当js引擎执行到:

$parent.appendChild($wave);

的时候,浏览器并没有将真实的DOM元素绘制到网页上。当然,作为开发者的我们是无法观测到这一现象的。如果你使用Chrome Dev Tools断点进行观测,就会发现这两句代码被强行打成了异步执行,因此这时候的动画也是可以正常播放的!

而这时候浏览器会继续向下执行:

$wave.style.cssText = `transition: all 1s; top:${y}px; left:${x}px; opacity: 0; width:${btnWidth * 2}px; height:${btnWidth * 2}px;`;

而后js代码执行,浏览器再将已经赋予css样式的DOM元素绘制到网页上,即

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值