css transition animation的使用(內(nèi)含貝賽爾曲線詳解)

區(qū)別:
transition也叫過渡動畫,主要是用于讓一個元素從一種狀態(tài)過渡到另一種狀態(tài)效果,常用于主動觸發(fā)的效果。例如移動端的頁面切換(很常用)、button點擊效果(也很常見)。
animation才是css3正宗的動畫,主要是用于實現(xiàn)某種持續(xù)的動畫效果(當(dāng)然簡單的過渡動畫也可以實現(xiàn)),常用于自動觸發(fā)的效果。例如加載中的持續(xù)動畫效果等等。
在學(xué)習(xí)這兩種動畫之前要最好是先了解一下 transition-timing-function(過渡效果時間曲線);
舉個栗子:
比如一輛小汽車從a點到b點的運動過程是一個動畫,那么過渡效果時間曲線就是這輛小汽車到底是勻速過去呢還是一直加速沖過去,又或者說一會加速沖一會減速慢行。
這個屬性有五種可供選擇的屬性值和一種可以自定義的屬性值
自定義屬性值:cubic-bezier(n,n,n,n)
在了解這個自定義屬性值之前我們再來深入了解一下貝塞爾曲線。
為什么要了解貝塞爾曲線?因為這個自定義時間過渡曲線就是用貝塞爾曲線表示的。(這是一個三階的貝塞爾曲線)
貝塞爾曲線應(yīng)用場景有哪些?貝塞爾曲線不僅僅在描述速度、時間上會起作用,在ps中的色彩調(diào)節(jié)和一些建筑工程學(xué)上面都會有涉及。
那我們先來畫一個二階的貝塞爾曲線吧。
首先打開ps,在一個平面內(nèi)隨便畫三個點a、b、c然后連接起來,如下圖。
然后在a、b中找到一點d,在b、c中找到一點e,滿足公式:ad/ab = be/bc
然后呢,連接d、e,在de線上找到一點f,滿足公式:df/de = ad/ab = be/bc
然后就沒有然后了,因為這個二階貝塞爾曲線已經(jīng)畫完了,這個曲線就是所有可能的f點。
然后我用谷歌瀏覽器調(diào)試工具再演示一下二階貝塞爾曲線圖(本來是想用火狐演示的,但是火狐瀏覽器調(diào)試曲線的時候?qū)蛹売悬c高,還很敏感,無法用gif工具錄制,所以就放棄了,但實際上我更喜歡火狐的調(diào)試動畫調(diào)試工具一點。)
1、上面的球代表動畫執(zhí)行的過程,球越快,顏色越淺,反之越深。
2、兩個固定點的坐標(biāo)是(0,0)和(1,1)
3、可調(diào)試點的坐標(biāo)是隨意拉動的,x軸要在0-1之間,y軸隨意。
4、x軸代表的時間,y軸代表的是路程(因為很多動畫并不是簡單的左右移動,所以以后要理解成動畫執(zhí)行的過程),注意:y軸不是速度,更不是加速度哦。
5、最下面的是cubic-bezier屬性具體取到的值(后面再講里面4個值得具體含義)
但實際開發(fā)過程中我們用到的大部分都是三階貝塞爾曲線(當(dāng)然也有用多階貝塞爾曲線的),也就是用兩個點去控制曲線的弧度,具體原理和上面的類似,如圖:
現(xiàn)在就可以解釋cubic-bezier為什么有四個值,就是這個兩個坐標(biāo)點。
再次聲明一下,y軸是距離,不是速度和加速度
cubic-bezier屬性還有五個可供選擇的值:(其實就是幾種寫死的過渡效果曲線)
·linear 規(guī)定以相同速度開始至結(jié)束的過渡效果(等于 cubic-bezier(0,0,1,1))。 ·ease 規(guī)定慢速開始,然后變快,然后慢速結(jié)束的過渡效果(cubic-bezier(0.25,0.1,0.25,1))。 ·ease-in 規(guī)定以慢速開始的過渡效果(等于 cubic-bezier(0.42,0,1,1))。 ·ease-out 規(guī)定以慢速結(jié)束的過渡效果(等于 cubic-bezier(0,0,0.58,1))。 ·ease-in-out 規(guī)定以慢速開始和結(jié)束的過渡效果(等于 cubic-bezier(0.42,0,0.58,1))。
一、transition (過渡動畫)
屬性 | 描述 | CSS |
---|---|---|
transition |
簡寫屬性,用于在一個屬性中設(shè)置四個過渡屬性。 | 3 |
transition-property |
規(guī)定應(yīng)用過渡的 CSS 屬性的名稱。 | 3 |
transition-duration |
定義過渡效果花費的時間。默認(rèn)是 0。 | 3 |
transition-timing-function |
規(guī)定過渡效果的時間曲線。默認(rèn)是 "ease"。 | 3 |
transition-delay |
規(guī)定過渡效果何時開始。默認(rèn)是 0。 | 3 |
實例:
<!DOCTYPE html> <html> <head> <style> div{ width:100px; height:100px; background:yellow; transition-property:width; transition-duration:1s; transition-timing-function:cubic-bezier(0,0,1,1); transition-delay:0s; } div:hover{ width:500px; } </style> </head> <body> <div></div> <p>請把鼠標(biāo)指針放到黃色的 div 元素上,來查看過渡效果。</p> <p><b>注釋:</b>本例在 Internet Explorer 中無效。</p> <p><b>注釋:</b>這個過渡效果會在開始之前等待兩秒。</p> </body> </html>
效果如下
transition簡化屬性寫法:
transition: property duration timing-function delay;
默認(rèn)值是transition:all 0 ease 0;
注意事項
在移動開發(fā)中直接使用transition動畫會讓頁面變得非??D(親測),所以我們常用transform:translate3D(0,0,0)或者transform:translateZ(0)來開啟移動端動畫的gpu加速,使動畫過程更流暢。
translate3D(0,0,0)是指電儀3D轉(zhuǎn)換
translateZ(0)是指定義3D轉(zhuǎn)換,只用Z軸
二、animation(動畫效果)
因為animation動畫是一段持續(xù)且循環(huán)的動畫效果,所以不像transition過渡動畫那樣簡潔,可能會涉及到很復(fù)雜的動畫效果,所以我們要先學(xué)習(xí)一下@keyframes規(guī)則
該規(guī)則是用來創(chuàng)建動畫的,說直白點就是告訴元素按哪種動畫效果執(zhí)行
@keyframes語法
@keyframes animationname {keyframes-selector {css-styles;}}
值 | 描述 |
---|---|
animationname | 必需。定義動畫的名稱。 |
keyframes-selector |
必需。動畫時長的百分比。 合法的值:
|
css-styles | 必需。一個或多個合法的 CSS 樣式屬性。 |
案例
<!DOCTYPE html> <html> <head> <style> div{ width:100px; height:100px; background:red; position:relative; animation:mymove 5s infinite; -moz-animation:mymove 5s infinite; /* Firefox */ -webkit-animation:mymove 5s infinite; /*Safari and Chrome */ -o-animation:mymove 5s infinite; /* Opera */ } @keyframes mymove{ 0% {top:0px;} 25% {top:200px;} 75% {top:50px} 100% {top:100px;} } @-moz-keyframes mymove /* Firefox */{ 0% {top:0px;} 25% {top:200px;} 75% {top:50px} 100% {top:100px;} } @-webkit-keyframes mymove /* Safari and Chrome */{ 0% {top:0px;} 25% {top:200px;} 75% {top:50px} 100% {top:100px;} } @-o-keyframes mymove /* Opera */{ 0% {top:0px;} 25% {top:200px;} 75% {top:50px} 100% {top:100px;} } </style> </head> <body> <p><b>注釋:</b>本例在 Internet Explorer 中無效。</p> <div></div> </body> </html>
效果如下:
說明
也就是說keyframes允許你設(shè)置在不同的時間段執(zhí)行不同的動畫效果
css3 動畫屬性
屬性 | 描述 | CSS |
---|---|---|
@keyframes |
規(guī)定動畫。 | 3 |
animation |
所有動畫屬性的簡寫屬性,除了 animation-play-state 屬性。 | 3 |
animation-name |
規(guī)定 @keyframes 動畫的名稱。 | 3 |
animation-duration |
規(guī)定動畫完成一個周期所花費的秒或毫秒。默認(rèn)是 0。 | 3 |
animation-timing-function |
規(guī)定動畫的速度曲線。默認(rèn)是 "ease"。 | 3 |
animation-delay |
規(guī)定動畫何時開始。默認(rèn)是 0。 | 3 |
animation-iteration-count |
規(guī)定動畫被播放的次數(shù)。默認(rèn)是 1。 | 3 |
animation-direction |
規(guī)定動畫是否在下一周期逆向地播放。默認(rèn)是 "normal"。 | 3 |
animation-play-state |
規(guī)定動畫是否正在運行或暫停。默認(rèn)是 "running"。 | 3 |
animation-fill-mode |
規(guī)定對象動畫時間之外的狀態(tài)。 | 3 |
<!DOCTYPE html> <html> <head> <style> div{ width:100px; height:100px; background:red; position:relative; animation:myfirst 5s linear 2s infinite alternate; -moz-animation:myfirst 5s linear 2s infinite alternate;/* Firefox: */ -webkit-animation:myfirst 5s linear 2s infinite alternate;/* Safari and Chrome: */ -o-animation:myfirst 5s linear 2s infinite alternate;/* Opera: */ } @keyframes myfirst{ 0% {background:red; left:0px; top:0px;} 25% {background:yellow; left:200px; top:0px;} 50% {background:blue; left:200px; top:200px;} 75% {background:green; left:0px; top:200px;} 100% {background:red; left:0px; top:0px;} } @-moz-keyframes myfirst /* Firefox */{ 0% {background:red; left:0px; top:0px;} 25% {background:yellow; left:200px; top:0px;} 50% {background:blue; left:200px; top:200px;} 75% {background:green; left:0px; top:200px;} 100% {background:red; left:0px; top:0px;} } @-webkit-keyframes myfirst /* Safari and Chrome */{ 0% {background:red; left:0px; top:0px;} 25% {background:yellow; left:200px; top:0px;} 50% {background:blue; left:200px; top:200px;} 75% {background:green; left:0px; top:200px;} 100% {background:red; left:0px; top:0px;} } @-o-keyframes myfirst /* Opera */{ 0% {background:red; left:0px; top:0px;} 25% {background:yellow; left:200px; top:0px;} 50% {background:blue; left:200px; top:200px;} 75% {background:green; left:0px; top:200px;} 100% {background:red; left:0px; top:0px;} } </style> </head> <body> <p><b>注釋:</b>本例在 Internet Explorer 中無效。</p> <div></div> </body> </html>
效果如下:
彩蛋
在火狐和谷歌中可以很方便的調(diào)處過渡效果時間曲線的定時函數(shù)編輯器,只用點擊下面的按鈕就可以了。
谷歌中:
火狐中:
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
css動畫屬性使用及實例代碼(transition/transform/animation)
這篇文章主要介紹了css動畫屬性使用及實例代碼(transition/transform/animation) ,需要的朋友可以參考下2019-05-09使用CSS transition和animation改變漸變狀態(tài)的實現(xiàn)方法
CSS漸變特性對于我們的幫助已經(jīng)非常強(qiáng)大了,它們可以幫助我們繪圖、 創(chuàng)建圖片占位符 、制作環(huán)形進(jìn)度條等等。接下來通過本文給大家介紹使用CSS transition和animation改變漸2018-10-29CSS3與動畫有關(guān)的屬性transition、animation、transform對比(史上最全
這篇文章主要介紹了CSS3與動畫有關(guān)的屬性transition、animation、transform對比,通過瀏覽器兼容性,用法和對比更深刻的展示了彼此之間的異同,具體操作步驟大家可查看下文2017-08-18CSS3中動畫屬性transform、transition和animation屬性的區(qū)別
最近在項目中用到了CSS3中的動畫屬性。無奈對于css3幾個新加的屬性不太熟悉,常常容易搞混。所以從網(wǎng)站研究了點資料,總結(jié)一下,方便有需要的朋友們可以參考學(xué)習(xí)。2016-09-25CSS3中的Transition過度與Animation動畫屬性使用要點
這篇文章主要介紹了CSS3中的Transition過度與Animation動畫屬性使用要點Transition和Animation能被用來制作基本的頁面圖片動態(tài)效果,當(dāng)然進(jìn)一步的控制還是需要JavaScript的2016-05-20深入探究CSS中Animations和Transitions的工作原理
這篇文章主要介紹了深入探究CSS中Animations和Transitions的工作原理,包括和GPU的硬件使用及相關(guān)屬性等內(nèi)容,需要的朋友可以參考下2015-06-28CSS3的transition和animation的用法實例介紹
transition用于設(shè)定一個元素的兩個狀態(tài),不同的狀態(tài)可以用偽類,下面與大家分享下CSS3的transition和animation的用法,需要的朋友可以參考下2014-08-20