第9章 CSS3中的變形與動畫(下)

Keyframes介紹

Keyframes被稱為關(guān)鍵幀挚币,其類似于Flash中的關(guān)鍵幀。在CSS3中其主要以“@keyframes”開頭拢锹,后面緊跟著是動畫名稱加上一對花括號“{…}”舆绎,括號中就是一些不同時間段樣式規(guī)則胞锰。

@keyframes changecolor{
  0%{
   background: red;
  }
  100%{
    background: green;
  }
}

在一個“@keyframes”中的樣式規(guī)則可以由多個百分比構(gòu)成的,如在“0%”到“100%”之間創(chuàng)建更多個百分比葬凳,分別給每個百分比中給需要有動畫效果的元素加上不同的樣式绰垂,從而達到一種在不斷變化的效果。

經(jīng)驗與技巧:在@keyframes中定義動畫名稱時火焰,其中0%和100%還可以使用關(guān)鍵詞from和to來代表劲装,其中0%對應的是from,100%對應的是to。

瀏覽器的支持情況:


在這里插入圖片描述

Chrome 和 Safari 需要前綴 -webkit-占业;Foxfire 需要前綴 -moz-绒怨。
案例演示
通過“@keyframes”聲明一個名叫“wobble”的動畫,從“0%”開始到“100%”結(jié)束谦疾,同時還經(jīng)歷了一個“40%”和“60%”兩個過程南蹂。“wobble”動畫在“0%”時元素定位到left為100px念恍,背景色為green六剥,然后在“40%”時元素過渡到left為150px,背景色為orange,接著在“60%”時元素過渡到left為75px,背景色為blue峰伙,最后“100%”時結(jié)束動畫疗疟,元素又回到起點left為100px處,背景色變?yōu)閞ed瞳氓。
HTML:

<div>鼠標放到我身上</div>

CSS:
@keyframes wobble {
  0% {
    margin-left: 100px;
    background:green;
  }
  40% {
    margin-left:150px;
    background:orange;
  }
  60% {
    margin-left: 75px;
    background: blue;
  }
  100% {
    margin-left: 100px;
    background: red;
  }
}
div {
  width: 100px;
  height: 100px;
  background:red;
  color: #fff;
}
div:hover{
  animation: wobble 5s ease .1s;
}

調(diào)用動畫

animation-name屬性主要是用來調(diào)用 @keyframes 定義好的動畫策彤。需要特別注意: animation-name 調(diào)用的動畫名需要和“@keyframes”定義的動畫名稱完全一致(區(qū)分大小寫),如果不一致將不具有任何動畫效果顿膨。
語法:

animation-name: none | IDENT[,none|DENT]*;

1锅锨、IDENT是由 @keyframes 創(chuàng)建的動畫名,上面已經(jīng)講過了(animation-name 調(diào)用的動畫名需要和“@keyframes”定義的動畫名稱完全一致)恋沃;
2必搞、none為默認值,當值為 none 時囊咏,將沒有任何動畫效果,這可以用于覆蓋任何動畫恕洲。
注意:需要在 Chrome 和 Safari 上面的基礎(chǔ)上加上-webkit-前綴,F(xiàn)irefox加上-moz-梅割。

@keyframes around{
  0% {
    transform: translateX(0);
  }
  25%{
    transform: translateX(180px);
  }
  50%{
     transform: translate(180px, 180px); 
  }
  75%{
    transform:translate(0,180px);
  }
  100%{
    transform: translateY(0);
  }
}
div {
  width: 200px;
  height: 200px;
  border: 1px solid red;
  margin: 20px auto;
}
div span {
  display: inline-block;
  width: 20px;
  height: 20px;
  background: orange;
  border-radius: 100%;
  animation-name:around;
  animation-duration: 10s;
  animation-timing-function: ease;
  animation-delay: 1s;
  animation-iteration-count:infinite;
}

設(shè)置動畫播放時間

animation-duration主要用來設(shè)置CSS3動畫播放時間霜第,其使用方法和transition-duration類似,是用來指定元素播放動畫所持續(xù)的時間長户辞,也就是完成從0%到100%一次動畫所需時間泌类。單位:S秒
語法規(guī)則

animation-duration: <time>[,<time>]*

取值<time>為數(shù)值,單位為秒底燎,其默認值為“0”刃榨,這意味著動畫周期為“0”,也就是沒有動畫效果(如果值為負值會被視為“0”)双仍。

設(shè)置動畫播放方式

animation-timing-function屬性主要用來設(shè)置動畫播放方式枢希。主要讓元素根據(jù)時間的推進來改變屬性值的變換速率,簡單點說就是動畫的播放方式朱沃。
語法規(guī)則:
animation-timing-function:ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>) [, ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier(<number>, <number>, <number>, <number>)]*
它和transition中的transition-timing-function一樣苞轿,具有以下幾種變換方式:ease,ease-in,ease-in-out,ease-out,linear和cubic-bezier茅诱。對應功如下:


在這里插入圖片描述

在調(diào)用move動畫播放中,讓元素樣式從初始狀態(tài)到終止狀態(tài)時搬卒,先加速再減速瑟俭,也就是漸顯漸隱效果。

設(shè)置動畫開始播放的時間

animation-delay屬性用來定義動畫開始播放的時間秀睛,用來觸發(fā)動畫播放的時間點尔当。和transition-delay屬性一樣,用于定義在瀏覽器開始執(zhí)行動畫之前等待的時間蹂安。

設(shè)置動畫播放次數(shù)

animation-iteration-count屬性主要用來定義動畫的播放次數(shù)椭迎。
語法規(guī)則:
animation-iteration-count: infinite | <number> [, infinite | <number>]*
1、其值通常為整數(shù)田盈,但也可以使用帶有小數(shù)的數(shù)字畜号,其默認值為1,這意味著動畫將從開始到結(jié)束只播放一次允瞧。
2简软、如果取值為infinite,動畫將會無限次的播放述暂。
舉例:
通過animation-iteration-count屬性讓動畫move只播放5次痹升,代碼設(shè)置為:
animation-iteration-count:5;
注意:Chrome或Safari瀏覽器,需要加入-webkit-前綴畦韭!

設(shè)置動畫播放方向

animation-direction屬性主要用來設(shè)置動畫播放方向疼蛾,其語法規(guī)則如下:
animation-direction:normal | alternate [, normal | alternate]*
其主要有兩個值:normal、alternate
1艺配、normal是默認值察郁,如果設(shè)置為normal時,動畫的每次循環(huán)都是向前播放转唉;
2皮钠、另一個值是alternate,他的作用是赠法,動畫播放在第偶數(shù)次向前播放麦轰,第奇數(shù)次向反方向播放。

設(shè)置動畫的播放狀態(tài)

animation-play-state屬性主要用來控制元素動畫的播放狀態(tài)砖织。
參數(shù):
其主要有兩個值:running和paused原朝。
其中running是其默認值,主要作用就是類似于音樂播放器一樣镶苞,可以通過paused將正在播放的動畫停下來,也可以通過running將暫停的動畫重新播放鞠评,這里的重新播放不一定是從元素動畫的開始播放茂蚓,而是從暫停的那個位置開始播放。另外如果暫停了動畫的播放,元素的樣式將回到最原始設(shè)置狀態(tài)聋涨。

@keyframes move {
  0%{
    transform: translateY(90px);
  }
  15%{
    transform: translate(90px,90px);
  }
  30%{
    transform: translate(180px,90px);
  }
  45%{
    transform: translate(90px,90px);
  }
  60%{
    transform: translate(90px,0);
  }
  75%{
    transform: translate(90px,90px);
  }
  90%{
    transform: translate(90px,180px);
  }
  100%{
    transform: translate(90px,90px);
  }
}

div {
  width: 200px;
  height: 200px;
  border: 1px solid red;
  margin: 20px auto;
}
span {
  display: inline-block;
  width: 20px;
  height: 20px;
  background: orange;
  transform: translateY(90px);
  animation-name: move;
  animation-duration: 10s;
  animation-timing-function: ease-in;
  animation-delay: .2s;
  animation-iteration-count:infinite;
  animation-direction:alternate;
  animation-play-state:paused;
}
div:hover span {
  animation-play-state:running;
}
設(shè)置動畫時間外屬性

animation-fill-mode屬性定義在動畫開始之前和結(jié)束之后發(fā)生的操作晾浴。主要具有四個屬性值:none、forwards牍白、backwords和both脊凰。其四個屬性值對應效果如下:

屬性值 效果
none 默認值,表示動畫將按預期進行和結(jié)束茂腥,在動畫完成其最后一幀時狸涌,動畫會反轉(zhuǎn)到初始幀處
forwards 表示動畫在結(jié)束后繼續(xù)應用最后的關(guān)鍵幀的位置
backwards 會在向元素應用動畫樣式時迅速應用動畫的初始幀
both 元素動畫同時具有forwards和backwards效果

在默認情況之下,動畫不會影響它的關(guān)鍵幀之外的屬性最岗,使用animation-fill-mode屬性可以修改動畫的默認行為帕胆。簡單的說就是告訴動畫在第一關(guān)鍵幀上等待動畫開始,或者在動畫結(jié)束時停在最后一個關(guān)鍵幀上而不回到動畫的第一幀上般渡±帘或者同時具有這兩個效果。
例如:讓動畫停在最一幀處驯用。代碼如下:
animation-fill-mode:forwards;

好吧脸秽,CSS3 3D transform變換,不過如此蝴乔,更多細節(jié)參考鏈接:
http://www.zhangxinxu.com/wordpress/2012/09/css3-3d-transform-perspective-animate-transition/comment-page-1/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末记餐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子淘这,更是在濱河造成了極大的恐慌剥扣,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铝穷,死亡現(xiàn)場離奇詭異钠怯,居然都是意外死亡,警方通過查閱死者的電腦和手機曙聂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門晦炊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人宁脊,你說我怎么就攤上這事断国。” “怎么了榆苞?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵稳衬,是天一觀的道長。 經(jīng)常有香客問我坐漏,道長薄疚,這世上最難降的妖魔是什么碧信? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮街夭,結(jié)果婚禮上砰碴,老公的妹妹穿的比我還像新娘。我一直安慰自己板丽,他們只是感情好呈枉,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著埃碱,像睡著了一般猖辫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上乃正,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天住册,我揣著相機與錄音,去河邊找鬼瓮具。 笑死荧飞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的名党。 我是一名探鬼主播叹阔,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼传睹!你這毒婦竟也來了耳幢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤欧啤,失蹤者是張志新(化名)和其女友劉穎睛藻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邢隧,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡店印,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了倒慧。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片按摘。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纫谅,靈堂內(nèi)的尸體忽然破棺而出炫贤,到底是詐尸還是另有隱情,我是刑警寧澤付秕,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布兰珍,位于F島的核電站,受9級特大地震影響询吴,放射性物質(zhì)發(fā)生泄漏俩垃。R本人自食惡果不足惜励幼,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望口柳。 院中可真熱鬧,春花似錦有滑、人聲如沸跃闹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽望艺。三九已至,卻和暖如春肌访,著一層夾襖步出監(jiān)牢的瞬間找默,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工吼驶, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惩激,地道東北人铐达。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓艾扮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親挽放。 傳聞我的和親對象是個殘疾皇子酒请,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容