animation - 在 Safari 中将 CSS3 转换应用于 SVG 元素

标签 animation css safari svg

我正在使用 SVG 构建一个卡通风格的街景,我想让云朵在场景中滚动。为此,我使用 setTimeout 或 requestAnimationFrame(取决于浏览器)来更新 SVG (x) 位置,但 iPad 上的 FPS 计数器因此从 30fps 下降到 7fps。我再次尝试使用 SVG transform="translate(x, y)"来查看性能是否有所提高。它没有。

最后,我想我会尝试使用 CSS3 转换,并将其直接应用于 SVG 元素:

这在 chrome 和 firefox 中运行良好。但是 Safari(包括 iPad)似乎不接受在 SVG 上进行 css 转换。

这是一个已知错误吗?或者有办法解决这个问题吗?谢谢。

最佳答案

好吧,我不确定我是否 100% 正确,但似乎为任何类型的运动设置每一帧变换的“x”值(尤其是在复杂的视差情况下,至少5层同时移动)是一个非常糟糕的主意。

此外,经过大量研究,SVG1.1 似乎确实不支持跨所有浏览器的 CSS3 转换。 SVG 转换可以,但 CSS3 不行。

最后修复这个解决方案:我只是将所有 x、y 位置重置为 (0, 0),并使用 -webkit-transform 定位所有内容:translate3d(x, y, z )。 (以及其他浏览器的变体)。

注意:我什至将 translate3d 用于 2d 视差效果并将 z 保留为 0。translate3d 是硬件加速的,并且在 iPad 上有明显的性能提升。

关于animation - 在 Safari 中将 CSS3 转换应用于 SVG 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10498081/

相关文章:

jquery Sprite 动画响应式

css - 当前元素隐藏,悬停在它上面(不透明度改变)

SVG 中的 jQuery .offset() 在 Safari 中不起作用

android - 方向更改后反转共享元素转换

jquery - 如何创建动画翻转箭头动画

wpf - 如何使用动画改变网格的大小?

javascript - 如何将按钮定位在 ul li 的元素符号上并将按钮定位到输入元素的右侧?

html - Mac 上的 CSS 文本对齐

html - safari flex 不适用于 clearfix hack

css - CSS 变换缩放后 Safari 上的模糊 SVG