animation與transition 區別
標題中的兩個屬性都可以實現動畫效果,某些場景下兩者表現幾乎一樣。
可以肯定的一點是,兩個屬性肯定各有特點,下面將詳細分析一下兩者的主要不同點。
關於兩個屬性的具體用法可以參閱如下兩篇文章:
(1).animation屬性參閱CSS3 animation 動畫一章節。
(2).transition屬性參閱CSS3 transition 過渡一章節。
我們知道屬性的命名與其功能密切相關,先從兩者的名稱入手。
(1).animation:具有"動畫"和"動畫片"的意思,名副其實此屬性的確可以定義動畫效果。
(2).transition:具有"過渡"的意思,規定屬性從一個值過渡的另一個值,雖然也具有動畫效果,但是和真正的動畫效果效果比太遜色了,因為它只有初始和結束兩個狀態,所以"過渡"是對其更為恰當的描述。
一.動畫狀態的區別:
animation動畫可以通過@keyframes屬性對動畫進行更為精細的控制,設定多個狀態。
但是transition屬性則只有兩個狀態,起始狀態與結束狀態。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> div{ width:100px; height:100px; background:red; position:relative; top:100px; animation:theanimation 4s infinite alternate; } @keyframes theanimation{ 0%{left:0px;background:red;} 25%{left:30px;background:blue;} 50%{left:60px;background:yellow;} 75%{left:120px;background:green;} 100%{left:240px;background:red;} } </style> </head> <body> <div></div> </body> </html>
程式碼分析如下:
(1).一次完整的動畫時長是4秒。
(2).通過@keyframes屬性將動畫整個時長分為4份,在各自的時間段對動畫進行控制。
(3).也就是說animation動畫可以具有多個狀態,但是transtion動畫只有兩個狀態,起始狀態與結束狀態。
二.子屬性的數量不同:
兩個屬性都是複合屬性,包含有若干個子屬性,但是數目不相同。
當然子屬性數量不同會對效果有影響,很容易區分,本文不做更多介紹。
三.觸發時機不同:
兩個屬性的觸發時機有很大的不同,animation好比是一個自執行函式,只要定義好,立馬生效觸發動畫。
transition則像是一個事件處理函式(事件監聽器),只有它監聽的屬性值發生改變,動畫效果才會生效。
很容易理解,下面再來通過程式碼例項進行一下演示:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #ant{ width:100px; height:100px; background:blue; cursor: pointer; transition:width 2s; } #ant:hover{ width:500px; } </style> </head> <body> <div id="ant"></div> </body> </html>
程式碼分析如下:
(1).通過transition屬性監聽div元素width屬性的變化,動畫在兩秒內完成。
(2).當滑鼠懸浮於div之上的時候,設定width的寬度為500px,寬度的變化此時被transition堅挺到。
(3).於是開始動畫效果,寬度會進行平滑的過渡。
但是animation屬性並不具有上述監聽效果,一旦定義,動畫效果立馬生效,與width或者height等屬性一個道理。
可能有朋友對上述結論有所懷疑,認為下面這種效果也是監聽行為,其實只是一種錯覺而已,程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> div{ width:100px; height:100px; background:blue; cursor: pointer; } @keyframes theanimation{ from {width: 100px;} to {width: 500px;} } div:hover{ animation:theanimation 2s forwards; } </style> </head> <body> <div></div> </body> </html>
上述程式碼中,當滑鼠懸浮的時候,能夠以動畫方式設定div的寬度。
貌似與前面的程式碼功能是一樣的,也監聽了"某些東西"一樣,然而事實並非如此。
首先,它並沒有監聽屬性的變化,第二個滑鼠懸浮div的時候,是為div元素定義animation動畫。
本文對兩個屬性的主要區別進行了大致的介紹,如果朋友感覺需要有補充的地方,可以在文章底部留言。
相關文章
- animation、transition、transform的區別ORM
- transition、animation、transform三者有什麼區別?ORM
- 強大的CSS動畫:Transition與AnimationCSS動畫
- CSS動畫:animation、transition、transform、translateCSS動畫ORM
- CSS3 之 transform & transition & animationCSSS3ORM
- 終於不再對transition和animation,傻傻分不清楚了 --vue中使用transition和animationVue
- transition、transform、animate的區別?ORM
- transform,transition,animation 的混合使用——結業篇ORM
- 關於animation和transition一點知識
- CSS transition animation的使用(內含貝賽爾曲線詳解)CSS
- CSS3中translate、transform、translation和animation的區別CSSS3ORM
- ??與?:的區別
- css3 transform與animation妙用CSSS3ORM
- mouseenter與mouseover區別
- currentTarget與target區別
- mouseout與mouseleave區別
- classList與className區別
- innerText與textContent區別
- GET與POST區別
- let與const區別
- NIO與IO區別
- 區別mouseover與mouseenter?
- ApplicationContext 與 BeanFactory 區別APPContextBean
- setInterval()與setTimeout()區別
- match()與exec()區別
- localStorage與sessionStorage 區別Session
- showModal()與show() 區別
- <section>與<article> 區別
- onmouseover與onmouseenter區別
- offset與style區別
- cellpadding與cellspacing 區別padding
- encodeURI與encodeURIComponent區別
- JavaScript與ECMAScript 區別JavaScript
- FragmentPagerAdapter與FragmentStatePagerAdapter區別FragmentAPT
- put與putIfAbsent區別
- JavaScript 與TypeScript區別JavaScriptTypeScript
- __weak與__block區別,深層理解兩者區別BloC
- 值型別與引用型別的區別型別