>
>術語本身聽起來像是過於復雜的,接近更高的數學。在本文中,我將闡明此主題,並演示如何在您的前端項目中使用此技術。鑰匙要點
>單擊“啟動動畫”按鈕後,您會注意到,即使在桌面瀏覽器上,動畫看起來也不是非常平滑的。如果您在移動設備上測試動畫,則會發現它遠非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屬性的所有信息。
使用gpu友好的CSS屬性
>
>我如何啟用CSS動畫的硬件加速度?啟用CSS動畫的硬件加速度可以通過在CSS代碼中使用“變換”屬性來完成。該屬性觸發GPU接管動畫的渲染。例如,您可以使用'transform:transforatez(0)'或'變換:旋轉(0deg)'來啟用硬件加速度。
>
>硬件加速度如何影響移動設備上的電池壽命?儘管硬件加速可以提高CSS動畫的性能,但它也可以增加功耗,從而可能影響移動設備上的電池壽命。在使用硬件加速時,在性能和功耗之間取得平衡很重要。
>
>如何優化我的CSS代碼以進行硬件加速度? >以上是CSS動畫的硬件加速介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!