在过渡期间更新变换会导致过渡在 IE 和 MS 边缘闪烁

Posted

技术标签:

【中文标题】在过渡期间更新变换会导致过渡在 IE 和 MS 边缘闪烁【英文标题】:Updating transform during transition causes transition to flicker on IE and MS edge 【发布时间】:2017-12-29 04:57:26 【问题描述】:

考虑以下代码(简化):

html:

<button>move!</button>
<div/>

js:

var div = document.getElementsByTagName('div')[0]
var x = 0

document.getElementsByTagName('button')[0].onclick = function () 
  x = x + 100
  div.style.transform = 'translate3d(' + x + 'px, 0,0)'

css:

div 
  background: red;
  width: 100px;
  height: 100px;
  transition: transform 0.5s linear;

在过渡期间反复更改 transform 属性会导致 div 在过渡到正确值之前闪烁(朝向先前的起始位置)。

这似乎只发生在 MS 浏览器上(在 IE11 和 MS Edge 上测试)。

还在 Chrome、Safari、FF 上进行了测试,均按预期工作。

见小提琴:https://jsfiddle.net/youridaamen/8pnLfmpt/12/

相关:MS Edge CSS transform transition flickering on mouse move

【问题讨论】:

【参考方案1】:

我已将变换样式更改为 marginLeft,它似乎工作得更好(在 IE 上)。 jsfiddle

Javascript/JQuery:

var buttons = document.getElementsByTagName('button')
var start = buttons[0]
var reset = buttons[1]
var div = document.getElementsByTagName('div')[0]
var x = 0

start.onclick = function () 
x+=100;
div.style.marginLeft = x + "px";


reset.onclick = function () 
x = 0
div.style.marginLeft = x + "px";

【讨论】:

有效,但与转换相比表现不佳(推荐阅读:html5rocks.com/en/tutorials/speed/high-performance-animations)

以上是关于在过渡期间更新变换会导致过渡在 IE 和 MS 边缘闪烁的主要内容,如果未能解决你的问题,请参考以下文章

变换 + 过渡导致内容跳跃或模糊 CSS

2D变换过渡不适用于IE11中的VW和VH单元

牛逼的css3:动态过渡与图形变换

Chrome 88 更改在 translate3d 过渡期间导致图像模糊

溢出的像素错误:隐藏和变换:翻译

Firefox 变换比例图像错误。使用悬停变换过渡时,图像会闪烁自身的一个小版本