【发布时间】:2014-10-03 16:32:53
【问题描述】:
我的问题是,什么是更快的原生 SVG 动画标签,例如:
<path d="something very long and non-human-friendly">
<animateTransform attributeName="transform" attributeType="XML"
type="rotate" from="0" to="360" begin="0s" dur="3s" fill="freeze"
repeatCount="indefinite" />
</path>
或 CSS 动画,例如:
path {
animation: foo 3s ease-out infinite;
}
@keyframes foo {
50% {
transform: rotate(360);
}
也许最好使用 SVG 动画,因为 SVG 有更好的浏览器支持?
还相关:由于 CSS 转换触发硬件加速,我还想知道原生 SVG 动画标签是否也触发 GPU 加速或由浏览器绘制。如果没有,是否可以强制硬件对 SVG 原生动画进行控制?
干杯!
【问题讨论】:
-
它们都是一样的。 UA 通常有一个动画引擎,可以同时执行这两种动画。
-
注意:UA = 用户代理 = Web 浏览器。 @RobertLongson:我注意到 JS CSS 更新会导致速度较慢的 PC/平板电脑上的抖动,而
似乎更流畅。这是否意味着 JS 操作不使用动画引擎? -
正确。它无法加速,因为 UA 不知道未来会发生什么。
-
@AlvinK。那么 CSS 转换是由 UA 执行的吗?我认为它们是硬件加速的。我有一个带有 SVG 的页面,它使用 SVG 标签在其中设置一条路径的动画,然后在页面下方,我有一个使用 CSS 转换动画的 div:translate。没有 JS。当我滚动页面时,当我到达 SVG 时它会减慢一点绘画速度,但当我到达 div 时它会正常滚动。这就是为什么我问,如果 SVG 标签更慢或者不能被硬件加速,我打算用 CSS 转换来动画化 SVG 内部的路径。 PS。 SVG 不是 DOM 的一部分,它作为外部图像嵌入。
-
@RobertLongson:通常说包含
<animate>的外部SVG 是由动画引擎渲染的吗?虽然我注意到带有“动画”标签的嵌入式 SVG 确实在 UA 上运行得更快,但无法通过源代码进行确认。
标签: css animation svg hardware-acceleration