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


 

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

在看源碼之前我們先看一些小的運動效果

 

<!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的使用方法

<!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個參數 
                // 1、要改變的對象名
                // 2、運動所用的時間
                // 3、運動形式 默認是緩沖swing,勻速是linear 一般只有2種方法 ,可擴展
                // 4、回調函數
                
                $('#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做了這件事,他把運動轉成了配置寫法

 

好,那接下來我們先分析第一個參數,animate第一個參數是一個對象,這個對象可以接收width,height,opacity這樣的值,

也可以接收left, right, marginTop, paddingRight這樣的值,那他是怎么做到的呢?

 

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

 

我們一起來看看這個函數內部是怎么實現的,在8451行

 

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

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

 

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

 

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

 

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

 

 

未完待續。。。

 

 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM