Jquery源码分析---FX分析
2010-09-14 13:39:01 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鎯у⒔閹虫捇鈥旈崘顏佸亾閿濆簼绨绘い鎺嬪灪閵囧嫰骞囬姣挎捇鏌熸笟鍨妞ゎ偅绮撳畷鍗炍旈埀顒勭嵁婵犲嫮纾介柛灞捐壘閳ь剛鎳撻~婵嬪Ω閳轰胶鐤呯紓浣割儐椤戞瑩宕ョ€n喗鐓曟い鎰靛亝缁舵氨绱撻崘鈺傜婵﹤顭峰畷鎺戔枎閹搭厽袦婵犵數濮崑鎾绘⒑椤掆偓缁夌敻骞嗛悙鍝勭婵烇綆鍓欐俊鑲╃磼閹邦収娈滈柡灞糕偓鎰佸悑閹肩补鈧尙鏁栧┑鐐村灦閹稿摜绮旈悽绋课﹂柛鏇ㄥ灠閸愨偓濡炪倖鍔﹀鈧繛宀婁邯濮婅櫣绱掑Ο璇茶敿闂佺ǹ娴烽弫璇差嚕婵犳碍鏅插璺猴工瀹撳棝姊虹紒妯哄缂佷焦鎸冲畷鎴﹀箻鐠囧弶宓嶅銈嗘尰缁嬫垶绂嶉悙顒佸弿婵☆垳鍘ф禍楣冩倵濮樼偓瀚�

由于jquery对象支持fast,slow这样的常量来代替具体的speed的数值,第二步就是进行speed的处理。如果没有提供就提供默认的speed。其代码在jQuery.fx.speeds中speeds:{ slow: 600, fast: 200, _default: 400},定义了三种形式的速度。
接下来是对在完成的时间执行的complete的回调函数进行包裹。包裹就是看看参数中提供了队列的操作没有。提供了就进行出队列的操作。之后再执行complete的回调函数。
jQuery.fn.dequeue = function(type){
type = type || "fx";
return this.each(function(){
var q = queue(this, type);// 得取type的的值
q.shift();// 移出一个
if ( q.length )
q[0].call( this );
});
};
jQuery.fn.dequeue根据type取到当前dom元素的queue。先移出一个。再运行queue中的第一个。
Queue
在②处和上一部分都看看参数中提供了队列的操作没有,有就是进行queue的操作。Queue的操作和each的操作是不一样的。
// 实现队列操作,为jQuery对象中的每个元素都加type的属性,值为fn.
queue: function(type, fn){
// 可能看出支持一个参数的fn或array形式的集合其type为默认的fx的形式。
if(jQuery.isFunction(type)||( type && type.constructor == Array)) {
fn = type; type = "fx"; }
//没有参数时或一个参数是字符的type时就从jquery对象第一个元素的data中取
//出相对于的type(空就是所有)的队列中的元素(fn)。
if ( !type || (typeof type == "string" && !fn) )
return queue( this[0], type );//从queue取出
//把fn保存在jquery对象中的每个元素的data中的对应的type中去。
//对于fn是fn的数组集合,就直接设定data中type为fn的数组
//如果是单个的fn,那么就采用追加的形式追加到data的type的fn数组中。
//如果追加的形式,而且之前数组中没有fn元素。那么就执行这个元素。
return this.each(function(){
if ( fn.constructor == Array )// 数组的形式
queue(this, type, fn);// 存储在元素的type属性中
else {
queue(this, type).push( fn );
if ( queue(this, type).length == 1 ) fn.call(this);
}
});
},
更多精彩
赞助商链接