JQuery源碼分析 --- 運動animate 基本原理

 

本文基於JQuery2.0.3版本,下載地址 http://pan.baidu.com/s/1hrH1jnehtml

在看源碼以前咱們先看一些小的運動效果jquery

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    
    #div1{ width: 300px; height: 300px; background: red;}

    </style>
</head>
<body>
    
    <input type="button" value="點擊" id="btn">
    <div id="div1"></div>

    <script src="jquery-2.0.3.js"></script>
    <script>

        $(function(){
            $('#btn').click(function() {
                $('#div1').toggle( 500 );  // 改變寬高 透明度

        //
$('#div1').slideToggle( 500 ); 上下滑動

        //$('#div1').fadeToggle( 500 ); 淡入淡出

});; });
</script> </body> </html>

 

但這些方法的底層,其實調用的是animate,咱們看看animate的使用方法ide

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
    
    #div1{ width: 300px; height: 300px; background: red;}

    </style>
</head>
<body>
    
    <input type="button" value="點擊" id="btn">
    <div id="div1"></div>

    <script src="jquery-2.0.3.js"></script>
    <script>

        $(function(){
            $('#btn').click(function() {

                // 一般animate帶4個參數 
                // 一、要改變的對象名
                // 二、運動所用的時間
                // 三、運動形式 默認是緩衝swing,勻速是linear 通常只有2種方法 ,可擴展
                // 四、回調函數
                
                $('#div1').animate({ width: 500 }, 1000, 'swing', function(){
                    alert(1);
                });

         // $('#div1').animate({ width: 'toggle' }, 1000); 其實還能這麼寫! });; });
</script> </body> </html>

 

不過,在JQuery源碼內部,這種寫法其實被轉成了這樣函數

     $(function(){
            $('#btn').click(function() {

                $('#div1').animate({ width: 500 }, {
                    duration : 500,
                    easing : 'swing',
                    complete : function(){
                        alert(1);
                    }
                });

       // 這種寫法也叫配置寫法,好處是不用擔憂少傳參數,也不用擔憂參數順序 });; });

 

在JQuery源碼的8341行, optall作了這件事,他把運動轉成了配置寫法spa

 

好,那接下來咱們先分析第一個參數,animate第一個參數是一個對象,這個對象能夠接收width,height,opacity這樣的值,3d

也能夠接收left, right, marginTop, paddingRight這樣的值,那他是怎麼作到的呢?code

 

在源碼內部的8326行,咱們看到了一個叫作genFx的函數,他的做用就是收集第一個參數傳進來的值htm

 

咱們一塊兒來看看這個函數內部是怎麼實現的,在8451行對象

 

咱們看到genFx函數接受2個參數,其中第二個參數是一個布爾值,blog

你傳參,這個值就是1,不傳就是0

 

而變量attrs是一個對象,他接受了你傳進來的值,好比height,width等等,最後把這個值返回出去

 

因此咱們回頭再看第一個demo的時候,不難發現,其實JQuery內部是這樣調用的,都是調用genFx函數,只是用參數控制執行

 

咱們繼續,在源碼的8344行,咱們看到這樣一句,其實這句才真正實現了運動

 

 

未完待續。。。

 

 

若是你覺的本文對你有幫助,可隨意支付一些小費,以鼓勵我寫出更多的文章。

相關文章
相關標籤/搜索