第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

首頁 慕課教程 雪碧圖入門教程 雪碧圖入門教程 幀動畫函數(shù)steps()的解析

看完上一章的小伙伴們一定會有許多疑問,我明明定義了7幀:紅橙黃綠青藍(lán)紫。

為什么最后一幀紫色就是出不來呢?或者說必須做一些特殊處理才會出來呢?

steps()step-end分別代表什么含義呢?為什么一個帶括號一個不帶括號呢?

接下來我們將一一為大家揭曉答案。

1 steps()

step的英文原意是邁步,在這里可以理解為步驟。

既然是步驟,那就要指定分幾步進(jìn)行。所以括號里面就要寫入一個數(shù)字,這個數(shù)字代表要分多少步來進(jìn)行這段動畫。

拿我們定義過的change-color動畫來舉例:

/* 定義動畫:動畫名(change-color) */ 
@keyframes change-color {
    /* 第1步 */ from /* 0% */ { color: red } /* 紅 */
    /* 第2步 */ 16% { color: orange } /* 橙 */
    /* 第3步 */ 32% { color: yellow } /* 黃 */
    /* 第4步 */ 48% { color: green } /* 綠 */
    /* 第5步 */ 64% { color: cyan } /* 青 */
    /* 第6步 */ 80% { color: blue } /* 藍(lán) */
    /* 第7步 */ to /* 100% */ { color: purple } /* 紫 */
}

可以看到整個動畫一共分為了七個步驟,那么是不是我們要在 step() 的括號里寫上一個7呢?

  • steps(7)

你要是這么想的話,那你可就大錯特錯了。括號里面的數(shù)字不是指從0%到100%之間要被分成幾步,

而是從第一步到第二步要被分為幾步。同理,第二步到第三步,第三步到第四步,……,第N步到最后一步。

而我們想要的效果是:從紅變橙、從橙變黃、……、再從藍(lán)變紫。

所以我們只需要第一步到第二步、第N步到第N+1步之間只經(jīng)歷一個步驟就夠了,所以應(yīng)該寫成:

  • steps(1)

steps()括號里一共可以寫兩個參數(shù),第一個參數(shù)就是一個數(shù)字,代表把這次過渡分成幾步。

第二個參數(shù)不寫的話默認(rèn)就是end,也就是說:

steps(1) = steps(1, end)

聰明的小伙伴們肯定想了,既然有end,那肯定就會有start嘛!

對沒錯,第二個參數(shù)除了end以外還可以寫start。知道了它的第二個參數(shù),就比較好理解step-start和start-end了。

2. step-start 和 step-end

其實(shí)step-startstep-end并不是什么新的概念,而是steps(1, start)和steps(1, end)實(shí)在是太常用了。

在編程界有個不成文的規(guī)定:某樣事物如果使用次數(shù)很高的話通常都會出現(xiàn)一個縮寫來替代他。

我知道有的小伙伴肯定會有疑問:這真的是縮寫么?我怎么沒感覺出來縮了幾個字母呢?

其實(shí)如果仔細(xì)數(shù)一數(shù)的話還是縮了那么一點(diǎn)點(diǎn)的。

而之所以多出來兩個縮寫其實(shí)真實(shí)的目的并不是為了讓你少打那么一兩個字母,這樣的縮寫并沒有什么太大意義。

他真正的意義在于單復(fù)數(shù):

step-startstep-end里的step沒有s!!!

steps()有s的!!!

學(xué)過英語的同學(xué)應(yīng)該還記得單復(fù)數(shù)這個概念吧?(說不記得的同學(xué),你的英語老師棺材板快壓不住了)。

不記得沒關(guān)系,咱們一起來復(fù)習(xí)一下:一樣?xùn)|西如果只有一個的話(比如你有一部手機(jī))那么這個單詞的后面就不用加s;

反之如果一樣?xùn)|西有很多的話(你有好幾部手機(jī))那么這個單詞的后面就要加上s來表示。

steps()并不知道你會在括號里面寫幾,所以人家是帶s的,復(fù)數(shù)!

那么問題來了,最最常用的還就是steps(1),單數(shù)!

可是單數(shù)怎么能帶s呢?于是乎就有了step-startstep-end它倆了。

3. start 和 end

有的同學(xué)可能早就按耐不住自己躁動的內(nèi)心:道理我都懂,語法我也都知道,這個start和end的意思我小學(xué)也背過,但是我就是想知道start和end究竟是控制著哪方面的開始和結(jié)束!幀動畫的最后一幀顯示不出來到底和他倆有沒有點(diǎn)啥關(guān)系呢?

答案是:當(dāng)然有關(guān)系!

咱們正常人肯定都是這么想的:一個動畫我分為了七步,假如我讓動畫運(yùn)行七秒,那么每一秒鐘就要走一步,七秒過后我應(yīng)該會看見七幀。

這么想很正常對吧!聽起來挺是那么回事的啊!

但實(shí)際上是大家的認(rèn)知和電腦的認(rèn)知不一致,所以導(dǎo)致了這場誤會。

那么接下來我就帶領(lǐng)大家一起揭曉一下人類和電腦互相之間都是怎么定義幀動畫的:

/* 定義動畫:動畫名(change-color) */ 
@keyframes change-color {
    /* 第1步 */ from { color: red } /* 紅 */
    /* 第2步 */ 16% { color: orange } /* 橙 */
    /* 第3步 */ 32% { color: yellow } /* 黃 */
    /* 第4步 */ 48% { color: green } /* 綠 */
    /* 第5步 */ 64% { color: cyan } /* 青 */
    /* 第6步 */ 80% { color: blue } /* 藍(lán) */
    /* 第7步 */ to { color: purple } /* 紫 */
}

假如我們用steps(1)來運(yùn)行這個動畫,那么:

人類的想法:

? 第一步:紅色

? 第二步:橙色

? 第三步:黃色

? 第四步:綠色

? 第五步:青色

? 第六步:藍(lán)色

? 第七步:紫色

而電腦的想法:

? 第一步:紅色到橙色

? 第二步:橙色到黃色

? 第三步:黃色到綠色

? 第四步:綠色到青色

? 第五步:青色到藍(lán)色

? 第六步:藍(lán)色到紫色

steps()就是控制著這第一步到第二步、第N步到第N+1步。

steps(1)就代表了第一步到第二步:紅色到橙色之間用一步就走完。

同理,steps(10)就代表了第一步到第二步:紅色到橙色之間之間要慢慢過渡10次。

用一張圖片來方便大家理解:

圖片描述

圖片就可以很明顯看出steps()控制的到底是哪個地方。

仔細(xì)數(shù)一數(shù),steps()是不是要比紅橙黃綠青藍(lán)紫(我們定義過的幀)少一個?。?/p>

所以我們最后一幀才會顯示不出來,那么start和end又代表的是什么含義呢?

從圖中可以看出每一個steps()里面都包含了兩個步驟,start和end就是控制這個的。

假如說從紅到橙需要一秒鐘,那么start就表示第一秒鐘的開始階段就從紅變到橙色了,由于第一秒的一開始(也就相當(dāng)于零秒)就紅變橙了,也就是說紅色還沒來得及展示就變成橙色了,所以用戶壓根就看不見這個紅色,結(jié)果就是start會丟失第一幀。

end也是同理,紅色持續(xù)一秒,在第一秒的最后階段才會變成橙色,這樣的話我們就看得見紅色了。然后來到第二幀,第二幀是從橙變黃。

橙色持續(xù)一秒然后在這一秒的最后階段變黃、黃變綠、綠變青、青變藍(lán)、然后就來到了最后一幀:藍(lán)變紫。

藍(lán)色在本次動畫的最后一秒一開始就持續(xù)一秒,然后紫色在最后一秒的最后階段才會出現(xiàn),但是到了最后一秒得最后階段就意味著本次動畫即將結(jié)束了,紫色也是剛出現(xiàn)就即將消失,所以用戶也看不見紫色,結(jié)局就是end會丟失最后一幀。

這里附上一張w3c的step工作原理圖:
圖片描述
steps(1, end) 那張圖來舉例:假如第一步是從紅到黃,那么圖中的實(shí)心小圓點(diǎn)代表了紅色,然后圓點(diǎn)后面的線段代表紅色持續(xù)的時間,空心小圓點(diǎn)代表該變成黃色但還沒變成黃色,直到下一個實(shí)心小圓點(diǎn)才會變成黃色,依此類推。

從這張圖的走勢就可以很好的看出startend的各自丟幀情況,start的第一幀是空心的,end的最后一幀雖然是實(shí)心的,但后面已經(jīng)沒有了線段,也就是代表最后一幀沒有任何的運(yùn)行時間,所以它們分別會丟失第一幀和最后一幀。

3. 小結(jié)

我知道這很難理解,畢竟人類腦子里面想的都是這種方式:

圖片描述

而計(jì)算機(jī)確是這么運(yùn)行的:

圖片描述

所以在本篇的一開始我才會讓大家先記住結(jié)論,防止大家看不懂就不想繼續(xù)往下看了。

在前面也說了解決方案,大家有時間的可以來試一試,有利于更進(jìn)一步的去理解這段令人費(fèi)解的內(nèi)容。