在知道有 animation-play-state 這個animation的參數時,我內心是激動的。在得知iOS端并不支持時,一股涼意襲來
先來介紹一下今天的主角 animation-play-state
animation-play-stateCSS屬性定義一個動畫是否運行或者暫停。可以通過查詢它來確定動畫是否正在運行。另外,它的值可以被設置為暫停和恢復的動畫的重放。
恢復一個已暫停的動畫,將從它開始暫停的時候,而不是從動畫序列的起點開始在動畫。
在MDN文檔中了解到,這是一個實驗中的功能,但是其作用還是強大的。既可以控制/獲取元素的動畫狀態(paused,running)
所以,這個animation的參數用來控制動畫的播放狀態再合適不過了。畫外音:你還沒考慮兼容性呢!對!就是這個兼容性問題。在chrome上這個參數是可以支持的,但是iOS設備上就不支持了...嘆息。
當然不能因為兼容性問題就不用這個參數了,當然不能讓每個iOS用戶去下載一個chrome瀏覽器,當然...
那我們怎么解決呢???用JS
通過 Window.getComputedStyle() 方法,我們可以獲取元素實時的 style 的 CSSStyleDeclaration 對象,這個對象表示CSS屬性鍵值對的集合。也就是說我們使用這個方法可以獲取一個正在進行動畫的元素當前的 style 值。
PS:關于 Window.getComputedStyle() 方法的值可以在MDN上了解到,這里不展開敘述。給出一個語法的例子(摘自MDN)
let style = window.getComputedStyle(element, [pseudoElt]); 復制代碼
那么具體要怎么做呢?
See the Penanimation-play-state by luogao (@luogao) onCodePen.
代碼已經在上面的codepen預覽中展示啦,如果現實不來請點這里:point_right:Roy Luo's codepen
大致解釋一下就是:
在元素的外層的包裹元素上添加獲取到的執行動畫的元素的 style 計算屬性,從而讓執行動畫的元素暫停下來。
其實,最先遇到這個問題是在做小程序的時候。一個播放器的界面,中間一張專輯圖片。在圓形的黑膠唱片邊框中旋轉。當播放停止,圖片也同時停止旋轉。 停在當前旋轉的位置
當時看似簡單的一個需求,使用了 animation-play-state 并且與預期一樣達到了效果, 在模擬器中 。
沒錯,洋洋得意的以為完成了需求,結果真機(iOS)上一測試,原形畢露。