CSS3 animation – steps 函數詳解
本文通過實例代碼給大家介紹了CSS3 animation – steps 函數,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值這幾天在看一些 css3 動畫的源碼實現時,發現 css 代碼的 anima...
本文通過實例代碼給大家介紹了CSS3 animation – steps 函數,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值
這幾天在看一些 css3 動畫的源碼實現時,發現 css 代碼的 animation 當中有一個比較陌生的單詞 steps ,在源碼中是這么寫的:
animation: thunder 2s steps(1, end) infinite;
查閱相關資料后發現 steps 函數是 animation-timing-function
屬性的一個值,那這個函數相較于其他值比如 ease , linear 的區別在哪里呢。
steps
在查閱相關資料后才發現自己之前對 animation-timing-function
了解不夠充分,實際上 animation-timing-function
的 function 指的是 steps() 和 cubic-bezier( ) 即貝塞爾曲線函數這兩個函數,像 linear , ease 這些值其實是 cubic-bezier()
函數的特殊值, steps() 函數同樣也有兩個特殊值: step-start
和 step-end
。在了解這些前提后,下面來具體分析 steps 函數的作用。
實際上 steps 函數和 cubic-bezier
函數分別對應動畫的兩種形式:跳躍式和連貫式。回顧平常我們是怎么使用 cubic-bezier
函數的:
div {
animation: move 1s linear infinite alternate;
}
@keyframes move {
0% {
margin-left: 0;
}
30% {
margin-left: 50px;
}
100% {
margin-left: 100px;
}
}
我們只需要在 @keyframes 中定義關鍵幀, cubic-bezier
函數會幫助我們在關鍵幀之間補幀使其成為流暢的動畫,但有時候我們不希望動畫連貫的播放,而是跳躍式的播放,那我們就需要借助 steps 函數了。
steps函數接收兩個參數: number 和 position 。 number 是正整數, position 有兩個值: start 和 end 。前面我們提到 steps 的兩個特殊值: step-start 和 step-end ,實際上它們分別代表 steps(1, start) 和 steps(1, end) 。那這兩個參數分別代表什么含義呢?
number: number 表示動畫被分成了多少段,比如上述例子表示 div 從 0px 移動到 100px 的這一整段過程一共被分成 4 段。
position: position 參數可選,默認為 end 。 start 與 end 的含義是什么呢,我的理解是: number 會將整個動畫過程分成多段或者說多個周期, start 表示動畫的狀態會在每個周期的起始點瞬間完成變化,而 end 則表示動畫的狀態會在每個周期的結束點瞬間完成變化。這里附上 W3C 官方文檔上的一張圖片:
上圖的坐標系中,x軸代表時間,y軸代表動畫的進度,在這張圖中我們需要注意的是實心圓點,實心圓點表示的是動畫所處的狀態。我們來看第一張圖,它表示的是 steps(1, start) 。根據前面的解釋,整段動畫將會作為一段也就是只有一個周期,而指定了 start 參數使得動畫會在周期的起始點狀態發生改變,所以我們可以看到第一個實心圓點的坐標為 (0,1) 。對于第二張圖片,由于指定了 end ,所以動畫的狀態會在周期的結束點突變,因此對應兩個實心圓點的坐標為 (0,0) 和 (1,1) 。下面的 steps(3, start) 和 steps(3, end) 也是同樣的道理,這里就不具體分析了。
接下來為了更加直觀的感受 steps 函數的作用,舉幾個例子來加深理解:
這里先舉一個連貫動畫來作為參考,部分代碼如下:
div {
width: 100px;
height: 100px;
background-color: red;
animation: move 2s linear;
}
@keyframes move {
0% {
margin-left: 0;
}
100% {
margin-left: 200px;
}
}
效果如下:
可以看到紅方塊是經過 2s 勻速運動到終點,然后回到起始位置
接下來是 steps(1, start) 的例子:
div {
width: 100px;
height: 100px;
background-color: red;
animation: move 2s step-start;
}
效果如下:
可以看到在我點擊刷新的一瞬間方塊就到達了終點,然后經過 2s 后回到起始位置
再來看看 steps(1, end) 的例子:
div {
width: 100px;
height: 100px;
background-color: red;
animation: move 2s step-end;
}
效果如下:
可以看到當點擊刷新時方塊并沒有運動,這是因為方塊會在 2s 后瞬間移動到 200px 的位置,然后動畫結束,回到起始位置,由于這個過程特別快,肉眼是看不到的,所以看上去就好像方塊沒有運動。如果想要停留在終點只需要給 div 加上 animation-fill-mode: forwards
即可。
我們再來看看分成多段的情況,首先 start 分成多段:
div {
width: 100px;
height: 100px;
background-color: red;
animation: move 4s steps(4, start);
}
效果如下:
上述例子我們將 4s 動畫分成 4 個周期,方塊會在每個周期起始點也就是 0s ,1s ,2s ,3s 處發生位移,從上述效果圖我們也可以看出,在我點擊刷新瞬間就完成了一次狀態變化,然后在 3s 后達到終點,在終點待了 1s 到動畫結束,回到起始位置。
再來看 end 分成多段的情況:
div {
width: 100px;
height: 100px;
background-color: red;
animation: move 4s steps(4, end);
}
效果如下:
指定 end 會使動畫狀態在每個周期的結束點發生變化,對應例子就是在 1s ,2s ,3s ,4s 處發生變化。從上述效果圖我們也可以看出方塊在我點擊刷新的 1s 后開始運動,在 4s 方塊移動到終點的瞬間由于動畫結束的原因又移動到起始位置,所以會產生方塊好像沒有移動到終點的錯覺。
總結
以上所述是小編給大家介紹的CSS3 animation – steps 函數詳解,希望對大家有所幫助
純css實現輸入框placeholder動效及輸入校驗的示例代碼
文章主要介紹了純css實現輸入框placeholder動效及輸入校驗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值更多精彩內容請關注 https://github....
關于CSS中@support實現漸進式網頁設計實例代碼
文章主要給大家介紹了關于CSS中@support實現漸進式網頁設計的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用CSS具有一定的參考學習價值前言特性查詢賦予了我們...
CSS transition animation的使用(內含貝賽爾曲線詳解)
文章主要介紹了css transition animation的使用(內含貝賽爾曲線詳解),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,區別:transition也叫過渡動畫...
CSS自適應布局實現子元素項目整體居中/內部項目左對齊示例代碼
文章主要介紹了CSS自適應布局實現子元素項目整體居中,內部項目左對齊,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,日常工作時,我們可能遇到這...
使用CSS混合模式和SVG來動態更改產品圖片的顏色
文章主要介紹了使用CSS混合模式和SVG來動態更改產品圖片的顏色,需要的朋友可以參考下。前兩天在Codepen看到了@Kyle Wetton寫的一個示例, 使用CSS混合模式和SVG來改變沙發的...
css新手教程之背景圖充滿整個屏幕的示例代碼介紹
文章主要給大家介紹了關于css新手教程之背景圖充滿整個屏幕的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用css具有一定的參考學習價值。想讓整個界面有一個背...
用戶需求導致營銷型網頁設計
我們的每期話題,團隊在內部都會通過郵件進行一番討論,隨著討論的激烈,往往能碰撞出很多有意義的觀點,因此,將討論內容分享出來,有興趣的朋友可以接著話題討論下去。Junchen:期望不是從石頭里面蹦出來的,所有期望都是受到外界影響、結合自身需求的一個外在表現...
網頁設計柵格就是你對頁面版式的規劃
英文原文:http://desktoppub.about.com/od/grids/l/aa_gridsorder.htm柵格就是你對頁面版式的規劃你日常所見的許多頁面都有柵格存在。你可能注意不到,但它確實存在,并且支撐著設計內容,建立整體的架構,引導著頁面的元素。柵格是隱形的架構,用于指導你頁面...
網頁設計內容網頁中關于圖片預覽的設計
之前有寫過《內容頁頁碼的預覽導航》跟《照片預覽導航分析》兩個文章,想說明的是預覽這一功能在用戶心理所占有的比重是很大的,如果僅僅只是給出一排順序數字做為鏈接的標題,用戶的心理會產生不安全感。雖然給出一排順序數字做為鏈接幾乎是整個互聯網的默認分頁鏈接模...
網頁設計:腳本素材重構用戶體驗
設計網站的同志背景主要有兩種:學計算機、學藝術。基本上會寫代碼的不懂設計,會設計的不懂代碼,這個格局似乎到今天還沒變。某些學計算機的同學,有自己的審美品位,也能夠做出看起來不錯的網站,但學藝術的同學普遍難搞懂代碼...