學習記錄jQuery的animate函數

來源:互聯網
上載者:User

學習記錄jQuery的animate函數

很久之前就對jQuery animate的實現非常感興趣,不過前段時間很忙,直到前幾天端午假期才有時間去研究。

jQuery.animate的每種動畫過渡效果都是通過easing函數實現的。jQuery1.4.2中就預置了兩個這樣的函數:

easing: {
linear: function( p, n, firstNum, diff ) {
return firstNum + diff * p;
},
swing: function( p, n, firstNum, diff ) {
return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
}
}

從參數名隱約可以推測出firstNum是初始值。要是你的數學學得比較好,你可以發現linear函數是直線方程;要是你的物理學得比較好,你可以發現它是勻速運動的位移方程(我數學和物理都沒學好,是別人提醒我的……)。那麼diff和p就是速度和時間了。前端UI分享

再看看jQuery.animate的原型:

animate: function( prop, speed, easing, callback )

各參數的說明如下:

  • prop:一組包含作為動畫屬性和終值的樣式屬性和及其值的集合。
  • speed:動畫時間長度。
  • easing:要使用的擦除效果的名稱。
  • callback:動畫完成時執行的函數。

    元素的當前樣式值(firstNum)可以擷取,動畫時間長度(p)就是duration,最終樣式值是prop。理論上說,動畫速度(diff)是可以算出來的。但是這又必然需要另一個函數進行運算。這樣做明顯是不明智的。再看看調用easing函數的相關代碼(位於jQuery.fx.prototype.step中):

    var t = now();
    ...
    var n = t - this.startTime;
    this.state = n / this.options.duration;
    ...
    this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);

    可以發現,p參數的值也就是this.state的值,從上下文得知它實際上是動畫的時間進度。而firstNum和diff的參數值都是寫死的,分別是0和1。這下easing函數的秘密完全被解開,p、firstNum、diff都是百分率而非實際數值,easing函數的返回值也就是位移的進度。diff的值是1,也就是以1倍的速度運行動畫。算出位移進度後,通過“初始值+(最終值-初始值)×進度”就可以算出當前位移值:

    this.now = this.start + ((this.end - this.start) * this.pos);前端UI分享

    通過setInterval每隔一定時間(jQuery中是13ms)進行一次位移運算,直到目前時間與初始時間的差值大於動畫時間長度,這就是jQuery.animate的執行過程。

    按照常規思路,動畫的實現方式是這樣的:通過setInterval每隔一定時間給某個值增加特定數值,直到這個值達到限制值。這樣做的主要問題是,不同瀏覽器的運行速度不同,從而導致動畫速度有差異,一般是IE下比較慢,Firefox下比較快。而jQuery.animate是以目前時間來決定位移值,某個時刻的位移值總是固定的,因而動畫速度不會有差異。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.