摘要:通過從到位移的改變,將一組動(dòng)畫幀組成一個(gè)連續(xù)的動(dòng)畫。其余的動(dòng)畫幀將均勻的分部在兩個(gè)狀態(tài)的中間。例如會(huì)將整個(gè)動(dòng)畫平均分配為三個(gè)動(dòng)畫幀,即,和。
CSS動(dòng)畫中有一個(gè)animation-timing-function屬性,它的取值除了ease,linear,cubic-bezier之外,還有一個(gè)steps()階躍函數(shù),這篇文章我們來討論steps()函數(shù)新增的四種取值。到目前為止,這新增的幾個(gè)取值僅在Firefox 65+中可用,也就是說在其他瀏覽器實(shí)現(xiàn)之前,演示只能在Firefox中實(shí)現(xiàn)。
steps()函數(shù)中新增的四個(gè)值是:
jump-start
jump-end
jump-both
jump-none
這些新增的值與已有的值有什么區(qū)別?它們適合在什么時(shí)候使用?下面的內(nèi)容將詳細(xì)介紹。
首先,我們后退一步,看一看animation-timing-function屬性中easings取值和steps()函數(shù)的傳統(tǒng)取值。
Easings可以改變一個(gè)transition或者animation或者Web Animations API中動(dòng)畫的節(jié)奏,這個(gè)節(jié)奏是連續(xù)性的。
.mover { animation: move 2000ms; animation-timing-function: linear; /* easing */ transform: translateX(0px); } @keyframes move { 100% { transform: translateX(200px); } }
通過一個(gè)linear easing,元素會(huì)以均勻的速度移動(dòng)。如果我們改變?yōu)閑ase-in,元素的移動(dòng)節(jié)奏就會(huì)變?yōu)閯傞_始慢,到動(dòng)畫快結(jié)束時(shí)加速變快。
Steps則不同,我們可以將動(dòng)畫劃分為特定數(shù)量的動(dòng)畫幀,所以,如果改變easing為steps(2),那么動(dòng)畫將只有兩個(gè)動(dòng)畫幀,開始幀和結(jié)束幀。
steps()函數(shù)的第二個(gè)(可選)參數(shù)指定在每個(gè)間隔的起點(diǎn)或是終點(diǎn)發(fā)生階躍變化。之前支持start和end兩個(gè)值,現(xiàn)在又增加了四個(gè)新值。
Start和End在新增的四個(gè)值中,其中有兩個(gè)其實(shí)是原來start和end的代替值:
jump-start === start
jump-end === end
jump前綴幫助我們更有效地解釋單詞start和end。當(dāng)我們使用start或jump-start時(shí),我們告訴動(dòng)畫跳過起始位置。同樣的,使用end或jump-end時(shí),我們希望跳過結(jié)束位置。
你可以將steps(n)理解為一個(gè)linear均速移動(dòng)的動(dòng)畫元素按照指定的時(shí)間間隔進(jìn)行快照截取,動(dòng)畫的過程就是一個(gè)快照接著一個(gè)快照顯示的過程。當(dāng)我們指定一個(gè)動(dòng)畫為steps(4, jump-start)時(shí),意味著將一個(gè)平滑的動(dòng)畫過程平均劃分為四部分,然后取每個(gè)部分的開始狀態(tài)進(jìn)行快照截取,并將這些快照顯示出來。同樣的,steps(5, jump-end)意味將一個(gè)平滑動(dòng)畫平均劃分為五個(gè)部分,取每個(gè)部分的結(jié)束狀態(tài)進(jìn)行快照截取,最后將這些快照顯示出來。
當(dāng)我們想到時(shí)鐘上的秒針時(shí),就可以更清楚的認(rèn)識(shí)到start和end兩個(gè)值的作用 - 秒針需要運(yùn)行60秒旋轉(zhuǎn)一圈(從0度到360度),也就是steps(60)。無論使用jump-start/start還是jump-end/end都可以實(shí)現(xiàn)一圈又一圈的連續(xù)旋轉(zhuǎn),但是,如果jump-start/start和jump-end/end都顯示每個(gè)動(dòng)畫幀的起始狀態(tài)和結(jié)束狀態(tài),那么秒針就會(huì)在最頂部0度的位置停留兩次,這明顯是不符合常規(guī)的。
steps()另一個(gè)重要的應(yīng)用是雪碧圖動(dòng)畫。通過從translateX(0)到translate(-100%) 位移的改變,將一組動(dòng)畫幀組成一個(gè)連續(xù)的動(dòng)畫。
與jump-start,jump-end只是命名方式的改變不同,這是一個(gè)新增的steps取值。
有時(shí)候我們并不需要跳過動(dòng)畫的任何一個(gè)狀態(tài)。新的取值jump-none就支持同時(shí)保留動(dòng)畫的起始狀態(tài)和結(jié)束狀態(tài)。對于一個(gè)包含至少2幀的動(dòng)畫來說,起始狀態(tài)和結(jié)束狀態(tài)都將會(huì)顯示出來。其余的動(dòng)畫幀將均勻的分部在兩個(gè)狀態(tài)的中間。例如steps(3, jump-none)會(huì)將整個(gè)動(dòng)畫平均分配為三個(gè)動(dòng)畫幀,即0%,50%和100%。
移動(dòng)一個(gè)元素一個(gè)簡單的例子就是在屏幕上移動(dòng)一個(gè)元素,讓它以steps階躍的方式從A點(diǎn)移動(dòng)到B點(diǎn)。以前我們只能跳過開始狀態(tài)或者結(jié)束狀態(tài),并沒有一種簡單的方法讓動(dòng)畫同時(shí)顯示兩種狀態(tài)。而現(xiàn)在我們有了jump-none:
使用steps()方法之前的取值,仍然能夠?qū)崿F(xiàn)這一點(diǎn),但是需要做一些額外的數(shù)學(xué)計(jì)算。現(xiàn)在則變得簡單了,因?yàn)槟阒绖?dòng)畫的起始狀態(tài)和結(jié)束狀態(tài)都會(huì)被顯示。
Opacity不透明度Opacity屬性的動(dòng)畫同樣可以從新的取值jump-none中受益,假如我們需要實(shí)現(xiàn)一個(gè)不透明度Opacity從0到1階躍重復(fù)變化的動(dòng)畫(即閃爍效果),使用start或end值,將永遠(yuǎn)看不到完全不透明或完全透明的狀態(tài)。但是jump-none則不會(huì)出現(xiàn)這種問題,一個(gè)被設(shè)置為steps(2, jump-none)的動(dòng)畫會(huì)實(shí)現(xiàn)類似on/offk的效果:
我們可以跳過階躍動(dòng)畫的起始狀態(tài),可以跳過結(jié)束狀態(tài),可以兩個(gè)狀態(tài)都不跳,那么就剩下jump-both了,它表示起始和結(jié)束的兩個(gè)狀態(tài)都跳過。
我還沒有想到適合這個(gè)取值的用途,如果你想到了可以在下面評論告訴我。
瀏覽器支持Webkit和EdgeHTML內(nèi)核的瀏覽器到目前為止還不支持新增的steps函數(shù)值,所以我們僅僅是用于學(xué)習(xí)實(shí)驗(yàn),不要將它們使用在實(shí)際項(xiàng)目中。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104367.html
摘要:通過從到位移的改變,將一組動(dòng)畫幀組成一個(gè)連續(xù)的動(dòng)畫。其余的動(dòng)畫幀將均勻的分部在兩個(gè)狀態(tài)的中間。例如會(huì)將整個(gè)動(dòng)畫平均分配為三個(gè)動(dòng)畫幀,即,和。 CSS動(dòng)畫中有一個(gè)animation-timing-function屬性,它的取值除了ease,linear,cubic-bezier之外,還有一個(gè)steps()階躍函數(shù),這篇文章我們來討論steps()函數(shù)新增的四種取值。到目前為止,這新增的幾...
摘要:通過從到位移的改變,將一組動(dòng)畫幀組成一個(gè)連續(xù)的動(dòng)畫。其余的動(dòng)畫幀將均勻的分部在兩個(gè)狀態(tài)的中間。例如會(huì)將整個(gè)動(dòng)畫平均分配為三個(gè)動(dòng)畫幀,即,和。 CSS動(dòng)畫中有一個(gè)animation-timing-function屬性,它的取值除了ease,linear,cubic-bezier之外,還有一個(gè)steps()階躍函數(shù),這篇文章我們來討論steps()函數(shù)新增的四種取值。到目前為止,這新增的幾...
摘要:簡單就意味著更快的開發(fā)速度,更小的維護(hù)成本,同時(shí)往往具有更好的體驗(yàn)下面我介紹哪些或許你不知道小技巧。默認(rèn)為,此時(shí)陰影與元素同樣大。如果沒有指定,則由瀏覽器決定通常是的值,不過目前取透明。首先,我們要明白這里的最小寬度值是什么意思。 暑假實(shí)習(xí)的時(shí)候帶我的師傅,告訴我要注重基礎(chǔ),底層實(shí)現(xiàn)原理。才能在日新月異的技術(shù)行業(yè)站住腳跟,以不變應(yīng)萬變,萬丈高樓平地起,所以我們應(yīng)該不斷的去學(xué)習(xí),去交流。...
摘要:簡單就意味著更快的開發(fā)速度,更小的維護(hù)成本,同時(shí)往往具有更好的體驗(yàn)下面我介紹哪些或許你不知道小技巧。默認(rèn)為,此時(shí)陰影與元素同樣大。如果沒有指定,則由瀏覽器決定通常是的值,不過目前取透明。首先,我們要明白這里的最小寬度值是什么意思。 暑假實(shí)習(xí)的時(shí)候帶我的師傅,告訴我要注重基礎(chǔ),底層實(shí)現(xiàn)原理。才能在日新月異的技術(shù)行業(yè)站住腳跟,以不變應(yīng)萬變,萬丈高樓平地起,所以我們應(yīng)該不斷的去學(xué)習(xí),去交流。...
摘要:簡單就意味著更快的開發(fā)速度,更小的維護(hù)成本,同時(shí)往往具有更好的體驗(yàn)下面我介紹哪些或許你不知道小技巧。默認(rèn)為,此時(shí)陰影與元素同樣大。如果沒有指定,則由瀏覽器決定通常是的值,不過目前取透明。首先,我們要明白這里的最小寬度值是什么意思。 暑假實(shí)習(xí)的時(shí)候帶我的師傅,告訴我要注重基礎(chǔ),底層實(shí)現(xiàn)原理。才能在日新月異的技術(shù)行業(yè)站住腳跟,以不變應(yīng)萬變,萬丈高樓平地起,所以我們應(yīng)該不斷的去學(xué)習(xí),去交流。...
閱讀 2978·2021-11-25 09:43
閱讀 3600·2021-11-24 11:13
閱讀 3373·2021-10-14 09:42
閱讀 2578·2021-09-23 11:53
閱讀 3622·2021-09-22 15:57
閱讀 3233·2021-09-02 09:54
閱讀 3510·2019-08-30 13:47
閱讀 1650·2019-08-29 16:55