<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jialisoftw

    了解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就是速度和時間了。

    再看看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);

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

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

    posted on 2013-01-19 15:01 飛豬一號 閱讀(806) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    <2013年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統計

    常用鏈接

    留言簿

    隨筆檔案

    友情鏈接

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 色窝窝亚洲av网| 久久久久久AV无码免费网站下载| 亚洲AV日韩精品一区二区三区| 一级毛片免费播放男男| 亚洲国产成人久久精品动漫| 免费H网站在线观看的| 特级毛片aaaa免费观看| 亚洲五月六月丁香激情| 日本一区二区三区日本免费| 国产精品福利在线观看免费不卡| 亚洲网站在线免费观看| 亚洲av高清在线观看一区二区| 99久久99久久精品免费观看 | 美女被暴羞羞免费视频| 亚洲欧洲国产精品你懂的| 国产成人涩涩涩视频在线观看免费| 久久www免费人成精品香蕉| 亚洲免费二区三区| 精品亚洲成α人无码成α在线观看 | 国产成人人综合亚洲欧美丁香花 | 免费a级毛片高清视频不卡 | 中文字幕手机在线免费看电影| 亚洲第一页在线播放| 亚洲精品成人区在线观看| 国产免费看JIZZ视频| 3344在线看片免费| 免费的黄网站男人的天堂| 亚洲午夜电影一区二区三区| 日韩一卡2卡3卡4卡新区亚洲| 在线免费观看污网站| 最近中文字幕电影大全免费版| 狠狠躁狠狠爱免费视频无码| 亚洲精品色播一区二区| 亚洲性猛交xx乱| 国产亚洲成av片在线观看| 亚洲A丁香五香天堂网| 免费人成视频在线| 性短视频在线观看免费不卡流畅 | 中文毛片无遮挡高潮免费| 欧洲人成在线免费| 久久久久久久国产免费看|