组合大小和翻译过渡会导致 Safari 卡顿

Posted

技术标签:

【中文标题】组合大小和翻译过渡会导致 Safari 卡顿【英文标题】:Combining size and translate transitions causes stutter in Safari 【发布时间】:2015-07-31 20:21:31 【问题描述】:

向元素添加过渡并更改宽度和/或高度以及 -webkit-transform:translate3d 时,过渡动画会卡住。它似乎首先对宽度/高度变化进行动画处理,并将其部分平移,然后捕捉到最终平移位置。但是,当返回到原始样式时,动画是平滑的。我只在 Safari(版本 8.0.6 测试)中看到了这一点。这是一些示例 css

#foo
    width:100%;
    height:200px;
    border:1px solid black;
    position:relative; 


#poop
    width:25px;
    height:25px;
    background-color:green;
    position:absolute;
    right:50%;
    top:50%;
    -webkit-transition: all 1s;
    transform:translate3d(0,0,0);
    -webkit-transform:translate3d(0,0,0);


#foo .blah
    transform:translate3d(-100%,-100%,0);
    -webkit-transform:translate3d(-100%,-100%,0);
    width:100px;
    height:100px; 

还有一个 jsfiddle http://jsfiddle.net/84w4hj99/4/

为了演示,我正在使用 jquery 在单击按钮时向元素添加一个类,但在使用 :hover 时首先注意到它以获得相同的效果。我在这里遗漏了什么,还是只是 Safari 的问题,有人知道解决方法吗?谢谢。

【问题讨论】:

我遇到了同样的问题。就像浏览器在过渡完成之前不知道宽度/高度的变化。 【参考方案1】:

尝试使用transform: scale(),而不是更改宽度和高度。在这种情况下,您将顺利过渡。但是,您必须调整 toprighttransform: translate3D() 属性才能将对象定位回正确的位置。应该很容易。

见http://jsfiddle.net/y3xqak1z/

【讨论】:

以上是关于组合大小和翻译过渡会导致 Safari 卡顿的主要内容,如果未能解决你的问题,请参考以下文章

ui框架组件中的过渡动画卡顿

部分卷曲过渡导致控件调整大小

CSS 过渡:不透明度和可见性过渡不适用于 Firefox(适用于 Chrome / Safari)

safari 中的 css3 过渡不顺畅

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

带有过渡和 translateY 的 Safari 错误:“跳跃”元素