>
>术语本身听起来像是过于复杂的,接近更高的数学。在本文中,我将阐明此主题,并演示如何在您的前端项目中使用此技术。钥匙要点
>单击“启动动画”按钮后,您会注意到,即使在桌面浏览器上,动画看起来也不是非常平滑的。如果您在移动设备上测试动画,则会发现它远非60fps。为了解决此问题,我们可以使用Translate()函数使用CSS变换,而不是对顶部和左值进行动画。
<span><span>.ball-running</span> { </span> <span>animation: run-around 4s infinite; </span><span>} </span> <span><span>@keyframes run-around</span> { </span> <span>0%: { </span> <span>top: 0; </span> <span>left: 0; </span> <span>} </span> <span>25% { </span> <span>top: 0; </span> <span>left: 200px; </span> <span>} </span> <span>50% { </span> <span>top: 200px; </span> <span>left: 200px; </span> <span>} </span> <span>75% { </span> <span>top: 200px; </span> <span>left: 0; </span> <span>} </span><span>}</span>在下面的演示中尝试以上代码:
请参阅用codepen上的sitepoint(@sitepoint)的CSS变换的CSS转换的笔动画。
现在,动画很好。伟大的!那么为什么这会有所帮助呢?好吧,与左和顶部属性的动画不同,CSS变换不会引起重新粉刷。让我们看一下动画执行期间Chrome Devtools中的时间轴面板:
现在查看CSS转换的时间表:
如您所见,动画期间没有绿色条。
> Chrome的DevTools中可用的另一个功能以跟踪重新粉刷过程是“启用油漆闪烁”。您可以通过打开DevTools,键入ESC键,然后选择“渲染”选项卡来找到此选项。当打开此功能时,绿色框(即油漆矩形)将出现在重新粉刷的区域周围。在左和顶部的示例中,球有一个用于整个动画过程的绿色盒子,指示重新涂片。
另一方面,在CSS转换示例中,油漆矩形仅显示在第一个也是最后一个动画帧上。
>那么,如何确切地改变没有重新粉的动画?基本答案是,CSS变换直接出现在使用硬件加速度的GPU
内存中,从而避免了软件渲染。让我们更详细地看一下。
>浏览器收到页面标记时,它将其解析以构建DOM树。 DOM树和CSS允许浏览器构建渲染树。渲染树由渲染对象组成 - 页面上要渲染的元素。每个渲染对象都分配给图形层。每层都将其上传到GPU作为纹理。这里的诀窍是,该层可以在不重新粉刷的情况下在GPU中转换,就像3D图形一样。这些转换是由单独的合成过程进行的。您可以在此处找到有关Chrome中构图的更多信息。
> 在我们的示例中,CSS变换创建了一个可以直接在GPU中转换的新复合层。 Chrome的DevTools允许使用“显示层边框”选项查看复合层。每个复合层都有一个橙色边框。
我们与CSS转换的球具有橙色边界,并移动到单独的复合层:
在以下情况下这样做:
>对于3D或透视CSS变换(在我们的示例中)
3D和2D变换之间的区别在于3D变换使浏览器事先创建一个单独的复合层,而2D变换则可以飞行。在动画开始时,创建了一个新的复合层,并将纹理加载到GPU上,该GPU启动重新粉刷。然后,动画由GPU中的合成器执行。动画完成后,将删除附加的复合层,从而导致另一个重新粉刷的操作。
中的渲染元素
并非所有CSS属性上的元素都可以直接在GPU中处理。仅支持以下属性:>变换
>
请参阅codepen上的sitepoint(@sitepoint)用顶部/左属性的球动画。
<span><span>.ball-running</span> { </span> <span>animation: run-around 4s infinite; </span><span>} </span> <span><span>@keyframes run-around</span> { </span> <span>0%: { </span> <span>top: 0; </span> <span>left: 0; </span> <span>} </span> <span>25% { </span> <span>top: 0; </span> <span>left: 200px; </span> <span>} </span> <span>50% { </span> <span>top: 200px; </span> <span>left: 200px; </span> <span>} </span> <span>75% { </span> <span>top: 200px; </span> <span>left: 0; </span> <span>} </span><span>}</span>>再次,球运动是生干的。发生这种情况是因为每个重新粉刷的操作都由于背景模糊。
现在,让我们将转换hack添加到容器中。
>>请参阅codepen上的sitepoint(@sitepoint)的硬件加速的左/顶部属性。
结果还不错,动画效果很好。为什么?因为现在变模的价格昂贵的背景已移至另一个复合层,并且每个动画步骤的重新粉刷都很便宜。
>>没有免费的。有一些与硬件加速有关的问题。
>内存
最重要的问题与内存有关。为GPU加载太多纹理可能会导致内存问题。这在移动设备上确实至关重要,甚至可能崩溃移动浏览器。介意后果,不要为页面上的每个元素使用硬件加速度。
GPU的渲染会影响字体抗叠叠。发生这种情况是因为GPU和CPU具有不同的渲染机制。因此,即使您在动画结束时关闭硬件加速度,在动画过程中将显示文本模糊。您可以在基思·克拉克(Keith Clark)的这篇文章中阅读有关字体渲染问题的更多信息。
不久的将来
<span><span>.ball-running</span> { </span> <span>animation: run-around 4s infinite; </span><span>} </span> <span><span>@keyframes run-around</span> { </span> <span>0%: { </span> <span>top: 0; </span> <span>left: 0; </span> <span>} </span> <span>25% { </span> <span>top: 0; </span> <span>left: 200px; </span> <span>} </span> <span>50% { </span> <span>top: 200px; </span> <span>left: 200px; </span> <span>} </span> <span>75% { </span> <span>top: 200px; </span> <span>left: 0; </span> <span>} </span><span>}</span>> CSS Will-Crange属性的简介nick salloum
您需要了解的有关CSS Will-Crange属性的所有信息。
使用gpu友好的CSS属性
>
>我如何启用CSS动画的硬件加速度?启用CSS动画的硬件加速度可以通过在CSS代码中使用“变换”属性来完成。该属性触发GPU接管动画的渲染。例如,您可以使用'transform:transforatez(0)'或'变换:旋转(0deg)'来启用硬件加速度。
>
>硬件加速度如何影响移动设备上的电池寿命?尽管硬件加速可以提高CSS动画的性能,但它也可以增加功耗,从而可能影响移动设备上的电池寿命。在使用硬件加速时,在性能和功耗之间取得平衡很重要。
>
>如何优化我的CSS代码以进行硬件加速度? >以上是CSS动画的硬件加速介绍的详细内容。更多信息请关注PHP中文网其他相关文章!