過渡有transition-property
、transition-duration
、transition-timing-function
、transition-delay
四個屬性,當然過渡也提供了transition
簡寫。
當觸發過渡事件結束後,各屬性通過相同的過渡回到預設屬性,延遲相同,但是transition-timing-function是相反的。
如果想為元素新增animation動畫,必須需要定義乙個關鍵幀。
@keyframes name
to...
to}// 當然,也可以使用百分比實現過程的精細化定義,
// 當沒有定義from或0%的時候,預設從元素計算後屬性開始
// 當沒有定義to或100%的時候,預設動畫結束時狀態為元素計算後屬性
// 當動畫結束後,元素狀態將會回到行間樣式,即計算後屬性,也就是元素渲染後的樣式
一種是單獨宣告各個屬性,一種是使用animation簡寫屬性一次性宣告全部屬性,當然這兩種方式可以混著使用。
el.addeventlistener
('animationstart',(
)=>);
// 在動畫執行完成後觸發執行,若無限次執行且延遲大於零,此事件永遠不觸發。
el.addeventlistener
('animationend',(
)=>);
// 在動畫兩次迭代之間觸發執行
el.addeventlistener
('animationiteration',(
)=>);
animation還有特指度、!important、動畫順序、display:none對動畫影響、ui執行緒等,有機會再做乙個專題分享。
元素自從創立以來就是矩形的,且只能在橫軸和縱軸位置,而transform就是利用一些技巧將元素看起來 是傾斜的,但底層座標並沒有發生改變。
座標系常用的就是二維座標和三維座標,transform也就有2d和3d兩種版本。
// 移動類變換
transform:
translate
(x,y)
;//2d
transform:
translate3d
(x,y,z)
;// 3d
transform:
translatex()
translatey()
translatez()
;// 分方向移動
// 縮放類變換
transform:
scale
(x,y)
;// 2d
transform:
scale3d
(x,y,z)
;// 3d
transform:
scalex()
scaley()
scalez()
;// 分軸放縮
// 旋轉類變形
transform:
rotate
(deg)
;// 相當於rotatez()
transform:
rotate3d
(x,y,z, deg)
;// 不等價三個下邊的三個合在一起,x,y,z均可取0或1
transform:
rotatex()
rotatey()
rotatez()
;// 分軸旋轉
// 斜切類變形
transform:
skew
(x,y)
;// 與下邊兩個合起來不等價
transform:
skewx()
skewy()
;// 視域函式
transform:
persitive
(num)
;// 與後邊講的perspective屬性類似,不能是負值,否則會被忽略。
// 變形預設是按照元素的中心原點進行變換的,但可更改
tranform-origin:x y;
// 初始值為50% 50%。可以寫計算值,百分數或類似top的單詞
// 增強3d效果
transform-style:flat|perserve-
3d;// 預設flat,在元素進行3d變換時,是否保留子元素的3d變換。
// 景深
perspective:0;
// 預設值是none,
perspectiveorigin:x y ;
// 預設是50% 50%
// 處理背面
backface-visibility:hidden;
// 隱藏和父級角度相對的背面,預設visible
變換函式是w3c為方便使用封裝的函式,2d操作底層是3x3的矩陣,3d操作的是4x4矩陣,js中被不能獲取到變換的過程值,能獲取到的只是matrix(a,b,c,e,f),且變換具有不可逆性,因為多種型別變換更改matrix引數,舉證無法逆推。
在定義變換的時候,也可以直接使用matrix函式,通過引數的變換實現平移、旋轉、斜切縮放等變換,下邊只介紹2d相關操作。
transform元素變化是將元素進行空間以及狀態進行變換,transition過渡和animation動畫是定義元素實現空間變換或狀態變換過程中的形式,其中transform可是過渡或狀態的乙個css屬性。
transition只能操作元素樣式變化的開始和結束時候的狀態,而無法完成在過程的精準變化。
js本身是無法單獨完成動畫的,而是通過借助類似間歇性定時器改變元素的樣式屬性值,進而實現元素的動態。人眼每秒能夠識別的24幀,也就是每秒渲染24次,超多24幀在人眼中就會形成連續的動畫效果。
注意盡量不要直接操作元素樣式值,而是通過transform完成操作,這樣效能和效率更高一些。
儘管使用間歇性定時器能夠實現動畫,但是有失幀的情況,所以實現的動畫效能和視覺都不是特別好。
timer=requestanimationfarme(function),螢幕每秒60幀,當螢幕每次渲染的時候,便會執行一次動畫幀函式,但是如果需要持續動畫效果,需要使用遞迴。
cancelanimationframe(timer);
var timer =0;
run.
onclick
=function()
};
tween演算法是使用封裝函式的方式實現了獲取根據一系列引數計算,得到當前時刻元素應當的屬性值。
// t動畫已經執行了幾次,b動畫開始時值,c動畫初始值和目標值之間的差值,d動畫執行的次數
var val = tween[
'動畫方式'
](t,b,c,d)
;// 返回執行到第t次,動畫的屬性值
使用動畫幀和tween實現動畫
(
function()
}}; stop.
onclick
=function()
;})(
);
mtween是基於tween演算法的,這裡均不需要加單位。
css函式主要用來配合設定動畫使用,兩個引數是獲取屬性值,三個引數是設定屬性值。
css(el,attr[,val]);
即使是非數值也能更改樣式,只是無法用來實現動畫效果。
由於transform變換無法直接獲取計算後的樣式,所以需要先設定css(el,『translatex』,0);,然後才能在使用mtween進行設定transform的變換樣式。
mtween(,
duration:
, fx:
'動畫執行的形式,類似勻速'
, cb:
function()
, moving:
function()
});mtween.
stop
(el)
;// 停止某個元素的動畫
// 如果需要動畫執行完畢後再執行一次,需要在cb函式中將呼叫框架執行在執行一次,也可封乙個函式
css動畫的執行效率比js效率更高。
es6基礎、非同步處理、dom、bom、event事件。
css3動畫和js動畫
css3動畫 animation 是個簡寫屬性,用於設定六個動畫屬性。注意必須規定animation duration屬性,否則時長為0 animation timing function規定動畫速度曲線 alternate 動畫應該輪流反向 transtion 過度屬性 預設 all 0 ease...
簡單了解css3動畫與js動畫
相容性 css3 相容性不好,ie10才開始支援。js相容性好,甚至可以相容ie6。效能 css3 在效能上會稍微好一些,瀏覽器會對css3的動畫做一些優化 新建圖層來跑動畫 移動端的開發也有這種hack,開啟硬體加速,來解決可能的卡頓問題 css webkit transform translat...
CSS 動畫 3D翻頁動畫
doctype html html lang en head meta charset utf 8 meta name viewport content width device width,initial scale 1.0 title create effect of 3d title styl...