Jquery源码分析---FX分析
2010-09-14 13:39:01 来源:WEB开发网由于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);
}
});
},
更多精彩
赞助商链接