摘要:無效生效重復怎么辦與規則一樣,標準規定相同的關鍵幀不產生層疊,僅最后出現的認定為有效。但實際上和均將關鍵幀設計為可層疊的。為默認值,表示動畫一結束,動畫效果就結束表示動畫一開始就馬上執行完第一個關鍵幀的效果。
前言
?在《CSS魔法堂:Transition就這么好玩》中我們了解到對于簡單的補間動畫,我們可以通過transition實現。那到底多簡單的動畫適合用transtion來實現呢?答案就是——我們只需定義動畫起始和結束幀的狀態的動畫。一旦關鍵幀數大于2時,我們必須轉向CSS Animation了。本文為這段時間學習的記錄,歡迎拍磚。
簡單粗暴介紹CSS Animation 規則和屬性 定義關鍵幀動畫語法:
@keyframes{ [ { /* CSS Properties */ }]* }
示例:
@keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
注意項:
1.
// 命名需要遵循以下規則 const rIsInvalid = /^--|^[0-9]+-|^(?:unset|initial|inherit|none)$/ , rIsValid = /^[0-9a-z-_]+$/i function isValidAnimationName(animationName: string): boolean{ return !rIsInvalid.test(animationName) && rIsValid(animationName) }
2.
0-100%、from,等價與0%、 to,等價與100%。
3.
@keyframes CSS規則不支持層疊樣式,因此當出現多個同名keyframes,那么僅最后出現的那個有效。
/* 無效 */ @keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } /* 生效 */ @keyframes rotate { from { transform: rotate(90deg); } to { transform: rotate(-360deg); } }
4.
與@keyframes CSS規則一樣,標準規定相同的關鍵幀不產生層疊,僅最后出現的認定為有效。
但實際上FireFox14+和Chrome均將關鍵幀設計為可層疊的。
@keyframes rotate { from { transform: rotate(0deg); } from { background: red; } /* 上述兩條time offset實際上等價于 * from { transform: rotate(0deg); background: red; } */ to { transform: rotate(360deg); background: yellow; } }
5.!important導致屬性失效
一般情況下使用!important會讓CSS屬性獲得最高權重,但在@keyframes下卻會導致該CSS屬性失效。
@keyframes rotate { from { transform: rotate(90deg); background: red!important; /* background屬性無效 */ } to { transform: rotate(-360deg); } }
6.必須提供至少兩個關鍵幀
/* 不會根據緩動函數產生動畫效果,而是在動畫持續時間的最后瞬間移動過去 */ @keyframes move-left{ to { left: 100px; } }使用動畫
{ animation: ; }
示例:
.box.rotate { animation: rotate 10s infinite alternate; }子屬性介紹
注意:
默認情況下(none),動畫結束后會恢復動畫前的樣式;
設置backwards時,
其中ease | ease-in | ease-out | ease-in-out | linear | cubic-bezier(
?step-start實際上等價于steps(10, start),而step-end則等價于steps(10),所以我們只要理解好steps(
/* 通過設置在一個動畫周期內()的平均刷新幀數,實現突變動效。具體應用有:游戲精靈行走、打字效果等 * - 兩個關鍵幀間的刷新次數 * - 方向,可選值為 end | start。 * end為默認值,表示動畫一結束,動畫效果就結束; * start表示動畫一開始就馬上執行完第一個關鍵幀的效果。 */ steps( , )
從張旭鑫那偷來的解釋:
start:表示直接開始。也就是時間才開始,就已經執行了一個距離段。于是,動畫執行的5個分段點是下面這5個,起始點被忽略,因為時間一開始直接就到了第二個點:
end:表示戛然而止。也就是時間一結束,當前距離位移就停止。于是,動畫執行的5個分段點是下面這5個,結束點被忽略,因為等要執行結束點的時候已經沒時間了:
另外通過將
const target = document.getElementById("target") target.addEventListener("animationstart", e => { // 動畫開始時觸發 }) target.addEventListener("animationiteration", e => { // 每次重復執行動畫時觸發 // 當搞盡腦汁實現重播效果為1時,不會觸發。 }) target.addEventListener("animationend", e => { // 當動畫結束時觸發 })
到這里我們已經可以通過@keyframes定義和應用CSS Animation了,但我們能否獲取對動畫效果更多的控制權呢?如開始、暫停、繼續、重播。通過
function pause (target: HTMLElement):boolean { const isRunning = target.style.animationPlayState == "running" if (isRunning) { target.style.animationPlayState = "paused" } return isRunning } function play (target: HTMLElement):boolean { const isStop = target.style.animationPlayState == "paused" if (isStop) { target.style.animationPlayState = "running" } return isStop } function replay (target: HTMLElement, animationClassName: string):void { // 先移除動畫效果 target.classList.remove(animationName) // requestAnimationFrame的回調函數會在下一次界面渲染前執行 requestAnimationFrame(_ => { // 這時動畫的影響還在,所以要等界面渲染完后再重新啟用動畫效果,才能實現重播 requestAnimationFrame(_ => { target.classList.add(animationName) }) }) }總結
CSS3為我們提供了動畫效果,除了提供比Transition更豐富的可控性,比JavaScript更簡易的API,還讓我們可以使用GPU來加速呢^_^
尊重原創,轉載請注明來自:https://www.cnblogs.com/fsjoh... ^_^肥仔John
https://developer.mozilla.org...
https://designmodo.com/steps-...
http://lea.verou.me/2011/09/p...
http://jsfiddle.net/simurai/C...
https://www.zhangxinxu.com/wo...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/116846.html
摘要:前言過去零零星星地了解和使用和等偽類偽元素選擇器,最近看書時發現這方面有所欠缺,于是決定稍微深入學習一下,以下為偽類部分的整理。偽類偽類選擇器實質上是讓設計師可以根據元素特定的狀態,設置不同的視覺效果。也就是符合以下選擇器的元素均支持狀態。 前言 ?過去零零星星地了解和使用:link、::after和content等偽類、偽元素選擇器,最近看書時發現這方面有所欠缺,于是決定稍微深入學習...
摘要:不耽誤表單提交數據雖然我們無法看到的元素,但當表單提交時依然會將隱藏的元素的值提交上去。讓元素在見面上不可視,但保留元素原來占有的位置。不過由于各瀏覽器實現效果均有出入,因此一般不會使用這個值。繼承父元素的值。 前言 ?還記得面試時被問起請說說display:none和visibility:hidden的區別嗎?是不是回答完display:none不占用原來的位置,而visibilit...
摘要:非常的龐大,而且它是完全為設計而生的動效庫。它運行于純粹的之上,是目前最強健的動畫資源庫之一。可能是創建滾動特效最好用的工具,它支持大量的瀏覽器,只要它們支持和特性。可以通過安裝吊炸天了,接近現實生活中的物理運動碰撞慣性動畫庫。 收集日期為2019-02-28,★代表當時的該項目在github的star數量 Animate.css 56401 ★ 一個跨瀏覽器的動效基礎庫,是許多基礎動...
摘要:擼代碼實現首頁檢驗單查詢成品通用標準審核圓角的何止是啊上圖的變成橢圓形了,而且中的文字好像飄到外面。我們可以看到兩邊相交所形成的矩形的對角線,將作為邊的相交點。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發現border-radius還分水平半徑和垂直半徑,然后又發現border-top-left/right...
摘要:也就是說我們操作的幾何公式中的未知變量,而具體的畫圖操作則由渲染引擎處理,而不是我們苦苦哀求設計師幫忙。 前言 ?當CSS3推出border-radius屬性時我們是那么欣喜若狂啊,一想到終于不用再添加額外元素來模擬圓角了,但發現border-radius還分水平半徑和垂直半徑,然后又發現border-top-left/right-radius的水平半徑之和大于元素寬度時,實際值會按比...
閱讀 1598·2023-04-26 02:43
閱讀 2994·2021-11-11 16:54
閱讀 1343·2021-09-23 11:54
閱讀 1165·2021-09-23 11:22
閱讀 2358·2021-08-23 09:45
閱讀 845·2019-08-30 15:54
閱讀 3094·2019-08-30 15:53
閱讀 3184·2019-08-30 15:53