1. 程式人生 > >css3中建立動畫的三種方式詳解

css3中建立動畫的三種方式詳解

$div1.transition({
    transform : "translateX(300px)"
},3000,"linear", function(){
    $div2.transition({
        transform : "translateX(300px)"
    },3000,"linear", function(){
        $div3.transition({
            transform : "translateX(300px)"
        },3000,"linear", function(){
            alert("transition end");
        });
    });
});

五、非巢狀式鏈式動畫

相信你也看出來了,巢狀式鏈式動畫對開發人員來說很不友好,稍微一個小小的動畫就有可能巢狀上百行,對於維護和修改極為不利。 所以此處我們引入JQuery的Deferred物件。Deferred物件最早是為AJAX非同步載入所建立的,用於AJAX請求的回撥,讓開發人員從多個AJAX請求的回撥巢狀方法中解脫出來。 而在這裡,我們也可以將其引入到動畫中,以增強動畫的鏈式程式設計效果,簡化開發。 (有關Deferred物件的詳細資料請自行學習,由於脫離本文主題,不在此做詳細介紹) 此處我們先定義兩個方法,這兩個方法的原理分別用到了前面所說的addClass()和JQuery transit,但是它們都有一個共同點,在事件結束時都修改了defer屬性,並將其返回。
//addClass + animation
function addClassAni(element){
    var defer = $.Deferred();
    element.addClass("ani_class").on(animationEnd(),function(){
        defer.resolve();
    });
    return defer;
}
//JQuery transit
function addTransitAni(element){
    var defer = $.Deferred();
    element.transition({
        transform : "translateX(300px)"
    },3000,"linear", function(){
        defer.resolve();
    });
    return defer;
}
然後就可以愉快的利用Deferred進行鏈式程式設計啦!
addClassAni($div1).then(function(){
    return addClassAni($div2);
}).then(function(){
    return addTransitAni($div3);
}).then(function(){
    return addTransitAni($div4);
}).then(function(){
    alert("animation end!");
});
此處每一步都會返回一個Deferred物件,下一步操作做什麼要視該Deferred物件的狀態。 同時,如果某些動畫並非要等上一個動畫執行完才執行,那麼只需讓上一步動畫不返回Deferred物件即可。如下:
addClassAni($div1).then(function(){
    return addClassAni($div2);
}).then(function(){
    addTransitAni($div3);
}).then(function(){
    return addTransitAni($div4);
}).then(function(){
    alert("animation end!");
});
此處的$div3會與$div4會等$div2動畫完成後共同移動。

相關推薦

css3建立動畫方式

$div1.transition({ transform : "translateX(300px)" },3000,"linear", function(){ $div2.transition({ transform : "translateX(300px)" },30

spring建立物件的方式

前言 我們知道spring框架的核心就是IOC容器了,那麼IOC容器主要的作用就是建立物件和處理物件之間的依賴關係。本文主要講解IOC容器建立物件的三種方式。 建立物件的三種方式 1) 呼叫無引數構造器 2) 帶引數構造器 3) 工廠建立物件

多表連線的方式 hash join、merge join、 nested loop

在多表聯合查詢的時候,如果我們檢視它的執行計劃,就會發現裡面有多表之間的連線方式。多表之間的連線有三種方式:Nested Loops,Hash Join 和 Sort Merge Join.具體適用哪種型別的連線取決於 當前的優化器模式 (ALL_ROWS 和 RULE) 取決於表大小 取決於連線列

多表連線的方式 HASH JOIN MERGE JOIN NESTED LOOP

在多表聯合查詢的時候,如果我們檢視它的執行計劃,就會發現裡面有多表之間的連線方式。 之前打算在sqlplus中用執行計劃的,但是格式看起來有點亂,就用Toad 做了3個截圖。  

【REACT NATIVE 系列教程之四】重新整理元件RENDER(重新渲染)的方式

開發過遊戲的都應該很清楚,“刷屏”是多麼的重要。其實開發應用也如此,當元件的資料被修改後,如何及時更新元件呈現出最新的資料與效果一樣至關重要。那麼這裡Himi大概講三種常用的方式:this.setState()  【最為常用】這是在事件處理函式中和請求回撥函式中觸發 UI 更新的主要方法。一般情況下setSt

多表連線的方式 HASH JOIN MERGE JOIN NESTED LOOP【3】

SQL server 內部實現了三種類型的內連線運算,大多數人從來沒有聽說過這些連線型別,因為它們不是邏輯連線也很少被用於程式碼中。那麼它們什麼時候會被用到呢?答案是要依情況而定。這就意味著要依賴於記錄集和索引。查詢優化器總是智慧的選擇最優的物理連線型別。我們知道SQL優

mysql備份的方式

mysql> FLUSH TABLES WITH READ LOCK; 請求讀鎖 注:不要退出,另起一個終端: mysql> SHOW MASTER STATUS;          檢視二進位制檔案的位置 +------------------+----------+----------

javascript函式定義方式

定義函式的三種方式 function語句式 function test1() { console.info("test1"); } 函式的直接變數 ECMAScript var test2 = function () { cons

JavaScript元素建立方式

目錄 1. document.write("標籤的程式碼及內容"); 缺陷:如果是在頁面載入完畢後,此時通過這種方式建立元素,那麼頁面上存在的所有的內容全部被幹掉 <body> <input type="button" valu

Struts2學習(二)運行Action方法的方式

tracking 利用 content con return -m i++ var itl 1.運行execute()方法 一般的能夠直接在action中書寫execute,調用action時會自己主動運行此方法 2.配置method方法 在s

元素建立方式

<!--元素建立的三種方式--> <!--1.document.write("標籤的程式碼及內容")--> <!--2.物件.innerHTML="標籤及程式碼"--> <!--3.document.createElement("標籤的名字")--&

Java多執行緒建立方式與對比

一、繼承Thread類建立執行緒類 1、定義Thread類的子類,並重寫該類的run()方法,該run()方法的方法體代表了執行緒需要完成的任務,即執行緒的執行體。 2、建立Thread子類的例項,即建立執行緒物件。 3、呼叫執行緒物件的start()方法來啟動該執行緒

物件建立方式和閉包的兩常用場景--js

物件建立的三種方式 ①通過new關鍵字建立物件 var obj = new Object(); obj.name = 'daxue'; obj.age = 28; obj.fun = function(){ } alert(obj.age); ②

50、多執行緒建立方式之實現Runnable介面

實現Runnable介面建立執行緒 使用Runnable建立執行緒步驟: package com.sutaoyu.Thread; //1.自定義一個類實現java.lang包下的Runnable介面 class MyRunnable implements Runnable{ /

JS 之函式定義 & 建立物件 方式

JS函式建立三種方式 JS建立物件三種方式 一、javaScript 函式建立的三種方式 <html> <head> <meta http-equiv="Content-Type" content="text/htm

DataFrame建立方式

// Define the schema using a case class.// Note: Case classes in Scala 2.10 can support only up to 22 fields. To work around this limit,// you can use cust

多執行緒(一)執行緒建立方式

建立執行緒的三種方式: 1.第一種方式繼承Thread類,重寫Thread類中的run方法,還需要呼叫start方法,start方法相當於通知CPU,執行緒已經就緒,CPU在合適的時間點呼叫該執行緒的run方法;我們程式中的main方法,我們稱之為主執行緒。 2.建立執行緒的第二種方式,實現Runnabl

往HIVE表匯入匯出資料的幾方式

一:往HIVE表中匯入匯出資料語法結構:[ ]帶括號的表示可選擇欄位LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTOTABLE tablename

HTML5實現動畫方式

編者注:作者以一個運動的小車為例子,講述了三種實現HTML5動畫的方式,思路清晰,動畫不僅僅是,還有CSS3和.通過合理的選擇,來實現最優的實現。 PS:由於顯示卡、錄製的幀間隔,以及可能你電腦處理器的原因,播放過程可能有些不太流暢或者失真! 分三

springBoot專案建立方式

(一)Spring Tool Suite(即我們俗稱的STS) 1、開啟sts,file-->new-->other 點選“Spring-starter-Project”, 以上資訊依次為專案名稱,專案型別,打包型別,javaJDK版本,語言型別,包