最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

CSS3 animation – steps 函數(shù)詳解

  發(fā)布時(shí)間:2019-08-30 16:34:28   作者:佚名   我要評(píng)論
本文通過(guò)實(shí)例代碼給大家介紹了CSS3 animation – steps 函數(shù),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

這幾天在看一些 css3 動(dòng)畫(huà)的源碼實(shí)現(xiàn)時(shí),發(fā)現(xiàn) css 代碼的 animation 當(dāng)中有一個(gè)比較陌生的單詞 steps ,在源碼中是這么寫(xiě)的:

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)畫(huà)的兩種形式:跳躍式和連貫式。回顧平常我們是怎么使用  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)畫(huà),但有時(shí)候我們不希望動(dòng)畫(huà)連貫的播放,而是跳躍式的播放,那我們就需要借助 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)畫(huà)被分成了多少段,比如上述例子表示 div 從 0px 移動(dòng)到 100px 的這一整段過(guò)程一共被分成 4 段。

position: position 參數(shù)可選,默認(rèn)為 end 。 start 與 end 的含義是什么呢,我的理解是: number 會(huì)將整個(gè)動(dòng)畫(huà)過(guò)程分成多段或者說(shuō)多個(gè)周期, start 表示動(dòng)畫(huà)的狀態(tài)會(huì)在每個(gè)周期的起始點(diǎn)瞬間完成變化,而 end 則表示動(dòng)畫(huà)的狀態(tài)會(huì)在每個(gè)周期的結(jié)束點(diǎn)瞬間完成變化。這里附上 W3C 官方文檔上的一張圖片:

 

上圖的坐標(biāo)系中,x軸代表時(shí)間,y軸代表動(dòng)畫(huà)的進(jìn)度,在這張圖中我們需要注意的是實(shí)心圓點(diǎn),實(shí)心圓點(diǎn)表示的是動(dòng)畫(huà)所處的狀態(tài)。我們來(lái)看第一張圖,它表示的是 steps(1, start) 。根據(jù)前面的解釋?zhuān)蝿?dòng)畫(huà)將會(huì)作為一段也就是只有一個(gè)周期,而指定了 start 參數(shù)使得動(dòng)畫(huà)會(huì)在周期的起始點(diǎn)狀態(tài)發(fā)生改變,所以我們可以看到第一個(gè)實(shí)心圓點(diǎn)的坐標(biāo)為 (0,1) 。對(duì)于第二張圖片,由于指定了 end ,所以動(dòng)畫(huà)的狀態(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)畫(huà)來(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)畫(huà)結(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)畫(huà)分成 4 個(gè)周期,方塊會(huì)在每個(gè)周期起始點(diǎn)也就是 0s ,1s ,2s ,3s 處發(fā)生位移,從上述效果圖我們也可以看出,在我點(diǎn)擊刷新瞬間就完成了一次狀態(tài)變化,然后在 3s 后達(dá)到終點(diǎn),在終點(diǎn)待了 1s 到動(dòng)畫(huà)結(jié)束,回到起始位置。

再來(lái)看 end 分成多段的情況:

div {
  width: 100px;
  height: 100px;
  background-color: red;
  animation: move 4s steps(4, end);
}

效果如下:

 

指定 end 會(huì)使動(dòng)畫(huà)狀態(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)畫(huà)結(jié)束的原因又移動(dòng)到起始位置,所以會(huì)產(chǎn)生方塊好像沒(méi)有移動(dòng)到終點(diǎn)的錯(cuò)覺(jué)。

總結(jié)

以上所述是小編給大家介紹的CSS3 animation – steps 函數(shù)詳解,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • CSS3動(dòng)畫(huà)之利用requestAnimationFrame觸發(fā)重新播放功能

    這篇文章主要介紹了利用requestAnimationFrame重新播放(觸發(fā))CSS3動(dòng)畫(huà),代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-11
  • css3中用animation的steps屬性制作幀動(dòng)畫(huà)

    這篇文章主要介紹了css中用animation的steps屬性制作幀動(dòng)畫(huà),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-04-25
  • 10分鐘入門(mén)CSS3 Animation

    本篇介紹的animation屬性和傳統(tǒng)的動(dòng)畫(huà)制作一樣,能控制幀的每一步,制作出更強(qiáng)大的動(dòng)畫(huà)效果。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看
    2018-12-25
  • css3的動(dòng)畫(huà)特效之動(dòng)畫(huà)序列(animation)

    這篇文章主要介紹了css3的動(dòng)畫(huà)特效之動(dòng)畫(huà)序列(animation) 的相關(guān)資料,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-22
  • CSS3中Animation動(dòng)畫(huà)屬性用法詳解

    這篇文章主要為大家詳細(xì)介紹了CSS3中Animation動(dòng)畫(huà)屬性用法,教大家如何使用animation動(dòng)畫(huà),感興趣的小伙伴們可以參考一下
    2016-07-04
  • CSS3中animation實(shí)現(xiàn)流光按鈕效果

    這篇文章主要介紹了CSS3中animation實(shí)現(xiàn)流光按鈕效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì)對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-21

最新評(píng)論

扬中市| 开原市| 大名县| 辽阳县| 梅州市| 滦平县| 东山县| 翁源县| 石阡县| 衡水市| 右玉县| 长岭县| 嵊泗县| 马山县| 三明市| 绥滨县| 泉州市| 新巴尔虎左旗| 萝北县| 渑池县| 肇源县| 浦城县| 乌拉特前旗| 启东市| 宝坻区| 普兰县| 临洮县| 洛隆县| 湟源县| 玉树县| 西藏| 乐山市| 磐石市| 托克逊县| 奉新县| 临澧县| 泰州市| 会宁县| 琼海市| 荔波县| 铁岭县|