本文基於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行,咱們看到這樣一句,其實這句才真正實現了運動
未完待續。。。
若是你覺的本文對你有幫助,可隨意支付一些小費,以鼓勵我寫出更多的文章。