本文基於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行,我們看到這樣一句,其實這句才真正實現了運動

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

