防止webkit转换的webkit转换闪烁

dev*_*ett 164 css css-transitions css-transforms

可能重复:
iphone webkit css动画导致闪烁

出于某种原因,在我的webkit-transform属性动画发生之前,有轻微的闪烁.这是我在做的事情:

CSS:

#element {
    -webkit-transition: -webkit-transform 500ms;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

$("#element").css("-webkit-transform", "translateX(" + value + "px)");
Run Code Online (Sandbox Code Playgroud)

在转换发生之前,有一个闪烁.知道为什么会这样,以及我如何解决问题?

谢谢!

更新:这只发生在Safari中.虽然动画确实有效,但在Chrome中却不会发生这种情况.

rpi*_*ing 275

这里提到了解决方案:iPhone WebKit CSS动画导致闪烁.

对于您的元素,您需要设置

-webkit-backface-visibility: hidden;
Run Code Online (Sandbox Code Playgroud)

  • 我的过渡影响了网站上的其他元素,最后我不得不将规则添加到网站上的所有元素. (11认同)
  • 使用-webkit-backface-visibility:hidden; 明智的!我只是试图在带有图像的可滚动列表中使用它,它导致严重的帧率下降. (4认同)
  • 对此属性使用通配符选择器实际上会导致其他元素的额外闪烁.我的工作解决方案是有选择地将属性应用于正在翻译的元素. (3认同)

abl*_*ike 82

规则:

-webkit-backface-visibility: hidden;
Run Code Online (Sandbox Code Playgroud)

不适用于精灵或图像背景.

body {-webkit-transform:translate3d(0,0,0);}
Run Code Online (Sandbox Code Playgroud)

搞砸了平铺的背景.

我更喜欢创建一个名为no-flick的类并执行此操作:

.no-flick{-webkit-transform:translate3d(0,0,0);}
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,背面可见性修复不适用于图像背景.谢谢. (6认同)
  • 请注意,当使用translate3d(0,0,0)_anywhere_时,Chrome现在会破坏任何背景位置:您可能拥有或不拥有的封面. (5认同)
  • 这也是SVG的方法. (3认同)

Mic*_*nai 51

将此css属性添加到闪烁的元素:

-webkit-transform-style: preserve-3d;
Run Code Online (Sandbox Code Playgroud)

(非常感谢Nathan Hoad:http://nathanhoad.net/how-to-stop-css-animation-flicker-in-webkit)


小智 17

我不得不使用:

-webkit-perspective: 1000;
-webkit-backface-visibility: hidden;    
Run Code Online (Sandbox Code Playgroud)

在元素上,或者在页面加载后第一次发生转换时我仍会得到一个flickr


Dan*_*llo 15

有关更详细的说明,请查看此帖子:

http://www.viget.com/inspire/webkit-transform-kill-the-flash/

我肯定会避免将它应用到整个身体.关键是确保您计划在将来转换的任何特定元素开始在3d中呈现,以便浏览器不必切换进出渲染模式.添加

-webkit-transform: translateZ(0) 
Run Code Online (Sandbox Code Playgroud)

(或已经提到的任何一个选项)动画元素将完成此任务.

  • 在将实际值放入以下内容后,此方法起作用:transform:translateZ(0.1px) (3认同)

Ada*_*ter 11

我发现应用-webkit-backface-visibility: hidden;到翻译元素及其-webkit-transform: translate3d(0,0,0);所有孩子,闪烁然后消失


don*_*kup 5

触发有问题的元素的硬件加速渲染。我建议不要在*,body或html标记上执行此操作以提高性能。

.problem{
  -webkit-transform:translate3d(0,0,0);
}
Run Code Online (Sandbox Code Playgroud)