css3 animation


如何定義和調用動畫

.myClass{
-webkit-transform:rotate(90deg); //使旋轉結束后保持旋轉的角度不變
-webkit-animation: animation 6s; //調用animation動畫 在6秒內執行結束
// -webkit-animation: animation 6s infinite;  增加 infinite 表示循環動畫。
}</code></pre>

<pre><code>@-webkit-keyframes animation{
from { -webkit-transform: rotate(0deg) }
to { -webkit-transform: rotate(3330deg) } //定義旋轉動畫

//也可以通過百分比指定各個時間執行什么動畫
@-webkit-keyframes animation{
0%{ left: 60px; opacity: 0;}
86% { left: 60px; opacity: 0;}
100% { left: 110px; opacity: 1;}
}
}

js 調用動畫

$(el).addClass("myClass"); // so easy

js 捕獲動畫事件

 1、-webkit-animation動畫其實有三個事件:      
      開始事件 webkitAnimationStart
      結束事件  webkitAnimationEnd
      重復運動事件 webkitAnimationIteration
 2、  css3的過渡屬性transition,在動畫結束時,也存在結束的事件:webkitTransitionEnd;
      注意:transition,也僅僅有這一個事件。
   
 var tt =  $(el).find('.myCanvas')[0];
 tt.addEventListener("webkitAnimationStart", function(){
 //動畫開始時事件
    console.log(1);  //動畫開始時,控制臺輸出1
 }, false);
 tt.addEventListener("webkitAnimationEnd", function(){
 //動畫重復運動時的事件
 console.log(3);  //第一遍動作完成時,控制臺輸出3
 }, false);

多次執行同一個 animation

需要在addClass之前先removeClass。
但又不能直接

removeClass(myClass);
addClass(myClass);

需要有一點時間間隔
比如在“webkitAnimationEnd”事件觸發時移除class,
或者

removeClass(myClass);
    setTimeout(function(){
    addClass(myClass);
},50);//時間好像為0都可以

一段實用的事件兼容代碼

//動畫事件兼容
var VENDORS = ["Moz",'webkit','ms','O'];
var TRANSITION_END_NAMES = {
    "Moz" : "transitionend"
    ,"webkit" : "webkitTransitionEnd"
    ,"ms" : "MSTransitionEnd"
    ,"O" : "oTransitionEnd"
}
var ANIMATION_END_NAMES = {
    "Moz" : "animationend"
    ,"webkit" : "webkitAnimationEnd"
    ,"ms" : "MSAnimationEnd"
    ,"O" : "oAnimationEnd"
}
var ANIMATION_START_NAMES = {
    "Moz" : "animationStart"
    ,"webkit" : "webkitAnimationStart"
    ,"ms" : "MSAnimationStart"
    ,"O" : "oAnimationStart"
}
var css3Prefix,TRANSITION_END_NAME,ANIMATION_END_NAME,ANIMATION_START_NAME;
var mTestElement = document.createElement("div");

for (var i = 0,l = VENDORS.length; i < l; i++) {
    css3Prefix = VENDORS[i];
    if ((css3Prefix + "Transition") in mTestElement.style) {
        break;
    }
    css3Prefix = false;
}

if(css3Prefix) {
    TRANSITION_END_NAME = TRANSITION_END_NAMES[css3Prefix];
    ANIMATION_END_NAME = ANIMATION_END_NAMES[css3Prefix];
    ANIMATION_START_NAME = ANIMATION_START_NAMES[css3Prefix];
}

一些常見的api

rotate(360deg) 旋轉

scale(1,1) 放大縮小比例

translate(x,y) 平移

skew() 坐標系旋轉?

div {
    -ms-transform: skew(30deg,20deg); /* IE 9 */
    -webkit-transform: skew(30deg,20deg); /* Chrome, Safari, Opera */
    transform: skew(30deg,20deg);
}

matrix() 包括以上所有的樣子,估計用不到

div {
    -ms-transform: matrix(0.866,0.5,-0.5,0.866,0,0); /* IE 9 */
    -webkit-transform: matrix(0.866,0.5,-0.5,0.866,0,0); /* Chrome, Safari, Opera */
    transform: matrix(0.866,0.5,-0.5,0.866,0,0);
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容