改善 Chrome 50 的網路動畫效能

Alex Danilo

Web Animations API 最早在 Chrome 36 中推出,可讓您在瀏覽器中使用 JavaScript 控制動畫,目前也已在 Gecko 和 WebKit 中實作。

Chrome 50 推出了一些變更,以改善與其他瀏覽器的互通性,並更符合規格。這些變更如下:

  • 取消事件
  • Animation.id
  • pause() 方法的狀態變更
  • 在主要影格中使用破折號名稱做為鍵已淘汰

在 Chrome 51 中,部分變更已完成:

  • 移除主要畫面格中以破折號表示的名稱做為鍵

取消事件

Animation 介面包含取消動畫的方法,有趣的是,這個方法稱為 cancel()。當方法依照規格呼叫時,Chrome 50 會實作取消事件的觸發動作,並透過 oncancel 屬性觸發事件處理作業 (如果已初始化)。

支援 Animation.id

使用 element.animate() 建立動畫時,您可以傳入多個屬性。舉例來說,以下是物件上不透明度動畫的範例:

element.animate([ { opacity: 1 }, { opacity: 0 } ], 500);

指定 id 屬性後,系統會在傳回的 Animation 物件上設定該屬性,這有助於在您需要處理大量 Animation 物件時偵錯。以下範例說明如何為您要例項化的動畫指定 id

element.animate([{opacity: 1}, {opacity: 0}], {duration: 500, id: "foo"});

pause() 方法的狀態變更

pause() 方法可用來暫停正在執行的動畫。如果您使用 playState 屬性檢查動畫的狀態,則應在呼叫 paused() 方法後將其設為 paused。在 50 以下版本的 Chrome 中,如果動畫尚未開始,playState 屬性會指示 idle,但現在會反映正確的狀態,也就是 paused

移除主要畫面格中以破折號表示的名稱做為鍵

為進一步遵循規格和其他實作項目,如果在關鍵影格動畫中使用破折號名稱做為鍵,Chrome 50 會向控制台傳送警告。正確的字串為 camelCase 名稱,請參閱 CSS 屬性至 IDL 屬性轉換演算法

舉例來說,CSS 屬性 margin-left 會要求您傳入 marginLeft 做為鍵。

Chrome 51 版已完全移除對破折號名稱的支援,因此現在是修正任何現有內容的好時機,以便根據規格正確命名。

摘要

這些變更可讓 Chrome 實作 Web Animations 的做法更接近其他瀏覽器,並更符合規格,有助於簡化網頁內容撰寫作業,以便提升互通性。