html鼠标在ie上抖动,IE下CSS3动画抖动

本文详细解析了在IE11中执行CSS动画时遇到的抖动问题,通过理解重排和重绘的概念,发现是由于多次不必要的重排导致。通过合并操作,将显示和动画效果结合,避免了动画抖动,展示了优化后的代码和流畅动画效果。
摘要由CSDN通过智能技术生成

问题记录:IE11中执行淡入动画时出现抖动效果,效果如下:

5f9f2912873d

抖动.gif

解决此问题需理解一些概念:

重排:重新生成布局

重绘:重新绘制

注意:重排必定导致重绘,重绘不一定需要重排;比如改变背景色,就只会触发重绘

原始代码:

// >>>>> js部分 <<<<<

listEl.show();

timer = requestAnimationFrame(function () {

listEl.removeClass('out').addClass('in');

})

// >>>>> css部分 <<<<<

.dropDown_list.in {

animation-name: in;

animation-duration: 2s;

animation-fill-mode: both;

}

@keyframes in {

0% {

opacity: 0;

filter:alpha(opacity=0);

transform-origin: 0% 0%;

transform: scaleY(0.8);

}

100% {

opacity: 1;

filter:alpha(opacity=100);

transform-origin: 0% 0%;

transform: scaleY(1);

}

}

执行步骤:

点击按钮,控制 ul 标签 display 属性让其显示

给ul标签追加 in 类名,让其 opacity 从0到1,实现淡入

动画抖动剖析:

执行 display: block 时会单独触发重排

执行动画 opacity 时也会单独触发重排

也就是 ul 标签刚显示出来,又重新应用上了 opacity: 0 和 transform: scaleY(.8),导致抖动的发生

解决方案:

既然是因为两次重排导致动画抖动,那合并起来触发一次重排就可以了,优化后的代码如下:

// >>>>> js部分 <<<<<

timer = requestAnimationFrame(function () {

listEl.show();

listEl.removeClass('out').addClass('in');

})

使用 requestAnimationFrame 的原因在于浏览器可以优化并行的动画动作,更合理的重新排列动作序列,并把能够合并的动作放在一个渲染周期内完成,从而呈现出更流畅的动画效果

优化后的效果:

5f9f2912873d

正常动画.gif

点击查看优化后的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值