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