看jquery源码更好使用API
看过源码我们会发现其实jquey中有很多很好用的api我们没有使用过,今天我们一起看一下队列(queue)的源码,看一下都有哪些好用的API。
大纲如下图:
queue有三个工具方法: queue,dqueue,_queueHooks,四个实例方法 :queue,dqueue,clearQueue,promise。jquery中很多模块都会同时有同名的工具和实例方法,但是实现功能的一般都是工具方法,而我们平常多用实例方法只因链式操作方便。
我们来看一下它们之间的关系:
工具方法queue
queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = data_priv.get( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray( data ) ) { queue = data_priv.access( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; }}
- 参数data存在,如果queue存在或都参数data为数组的话都会重新设置数据缓存
- 参数data存在,如果queue存在,则把数据push到queue里 像
这段代码很简单,其实就是把队列放在数据缓存里。 queue = data_priv.get( elem, type ), data_priv是缓存的实例对
工具私有方法_queueHooks
_queueHooks: function( elem, type ) {
var key = type + "queueHooks";
return data_priv.get( elem, key ) || data_priv.access( elem, key, {
empty: jQuery.Callbacks("once memory").add(function() {
data_priv.remove( elem, [ type + "queue", key ] );
})
});
}
这段代码虽少,但是很绕,这里的意思也就是说如果 data_priv.get( elem, key )存在则返回这个标志缓存,不存在则设置一个清空缓存的callBacks对象。
工具方法dqueue
dequeue: function( elem, type ) { type = type || "fx";
var queue = jQuery.queue( elem, type ),
startLength = queue.length,
fn = queue.shift(),
hooks = jQuery._queueHooks( elem, type ),
next = function() {
jQuery.dequeue( elem, type );
};
// If the fx queue is dequeued, always remove the progress sentinel
if ( fn === "inprogress" ) {
fn = queue.shift();
startLength--;
}
if ( fn ) {
// Add a progress sentinel to prevent the fx queue from being
// automatically dequeued
if ( type === "fx" ) {
queue.unshift( "inprogress" );
}
// clear up the last queue stop function
delete hooks.stop;
fn.call( elem, next, hooks );
}
if ( !startLength && hooks ) {
hooks.empty.fire();
}
}
出队的逻辑是函数出队并执行,把下一个函数当参数传递过去,当是动画队列时自动出队执行第一个函数,当队列为零时清空缓存。
实例方法promise
promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = data_priv.get( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj );}
这个方法是返回deferred的prmise对像,等队列中所有的函数执行完毕,执行回调,如 demo
分享到:
相关推荐
深入理解jQuery源码有助于开发者更好地利用其API并优化性能。主要关注点包括: 1. **选择器引擎(Sizzle)**:jQuery 使用Sizzle作为其选择器引擎,它是如何快速高效地解析CSS选择器并找到匹配元素的。 2. **链式...
《jQuery 1.11.3 源代码与中文API详解》 jQuery,作为一款广泛使用的JavaScript库,因其简洁的语法和强大的功能而深受开发者喜爱。本篇将重点解析jQuery 1.11.3版本的源代码及中文API,帮助读者深入理解其工作原理...
**jQuery API 深度解析** ...通过阅读和理解源码,开发者可以更深入地掌握jQuery的工作原理,从而更好地利用这个强大的工具。结合jQueryAPI.chm文档和jquery.js源码,开发者将能够更有效地利用jQuery进行Web开发。
jQuery 1.8.0 的中文API文档对于中国开发者来说尤其有价值,因为它提供了中文解释,帮助开发者更好地理解和使用jQuery的各种方法和函数。API文档通常包含详细的函数描述、参数说明、返回值类型以及示例代码,便于...
总结,jQuery EasyUI和jQuery 1.7 API是现代Web开发的强大工具,它们的组合使用能够极大地提高开发效率,简化前端代码,使开发者能专注于构建功能丰富、用户体验优秀的Web应用程序。通过深入理解和熟练掌握这两个...
《jQuery 1.4 源码及中文帮助API》是一个综合资源包,包含了jQuery库的1.4版本以及相关的中文文档,旨在帮助开发者更好地理解和使用这个强大的JavaScript库。在这个包里,我们可以找到以下关键元素: 1. **jQuery ...
《jQuery Mobile开发源码与API文档中文版》 jQuery Mobile是一款强大...对于初学者,阅读中文API文档和示例代码是入门的最佳途径,而对于进阶开发者,理解源码则能深入理解框架的内部机制,从而更好地定制和优化应用。
《jQuery 1.2.6 源码分析与API详解》 jQuery 是一个广泛使用的JavaScript库,它极大地简化了...通过对源码的分析和API的熟练运用,我们可以更好地理解和运用JavaScript,为构建高效、易维护的网页应用打下坚实基础。
这篇文档将深入探讨jQuery的核心功能及API用法,帮助你更好地理解和运用这个强大的工具。 1. **选择器(Selectors)** jQuery的选择器基于CSS,允许你快速准确地选取页面中的元素。例如,`$("#id")`用于选取ID为...
《jQuery源码深度解析》 ...深入理解jQuery源码,有助于我们更好地利用它来构建高效、易维护的Web应用。通过阅读中文注释,我们可以更直观地理解每个函数的作用和实现细节,从而提高我们的JavaScript编程能力。
本篇文章将深入探讨 jQuery 1.2.6 版本的源码,揭示其背后的实现原理,帮助开发者更好地理解和运用这一经典库。 ### 1. 基本结构 jQuery 的核心函数 `$` 是整个库的入口点。在 1.2.6 版本中,`$` 是一个立即执行的...
《jQuery1.4 API及未...通过深入理解其API并分析源码,我们可以更好地掌握JavaScript库的使用,提升开发效率,同时也能从中学习到优秀的编程实践。无论是初学者还是经验丰富的开发者,jQuery1.4都值得我们深入研究。
而"锋利的jQuery+源代码.rar"可能包含书中示例代码,这对于理解书中实例并进行实践至关重要。 学习jQuery,不仅能够提高开发效率,还能让你编写出更加流畅、用户体验更好的网页应用。无论是初学者还是有一定经验的...
jQuery Mobile 的源代码是其强大功能的基石,深入学习源码可以帮助我们更好地掌握其工作原理和设计模式。 在源代码中,我们可以看到jQuery Mobile是如何通过数据属性(data-attributes)和页面结构来增强HTML元素的...
**jQuery 1.3 和 jQuery 1.4.1 知识点详解** jQuery 是一个高效、简洁且功能丰富的 JavaScript 库,它极大地简化了 ...通过持续学习和掌握这些知识点,开发者能够更好地利用jQuery实现高效、优雅的JavaScript编程。
此外,jQuery 1.7.2还强化了AJAX功能,如$.ajax()、$.get()、$.post()等,提供了更丰富的选项和更好的错误处理机制。$.Deferred对象也得到了进一步完善,支持链式操作,使异步编程更加简洁。 在DOM操作方面,jQuery...
本资源包含了一系列关于jQuery Highcharts的实例、源码以及中文版API,旨在帮助开发者更好地理解和应用Highcharts。 首先,我们要理解jQuery Highcharts的基础知识。Highcharts的核心功能在于提供丰富的图表类型,...
理解这部分源代码有助于我们更好地控制页面的动态效果。 此外,jQuery还提供了Ajax、Deferred对象、插件扩展等功能。在源码中,我们还能发现jQuery如何利用JavaScript的原型继承和闭包来实现模块化和插件化的。通过...
学习jQuery源代码,可以帮助我们更好地理解其内部工作原理,从而编写出更高效、更优化的代码。1.11.3版的源码有注释,是学习的好材料,可以深入研究每个函数和方法的具体实现,进一步提升JavaScript技能。
jQuery 是一个广泛使用的...总的来说,这份包含jQuery源码和API的CHM文件是学习和研究jQuery的宝贵资料。通过深入阅读和实践,开发者不仅可以提升JavaScript技能,还能更好地运用jQuery来提高Web开发的效率和质量。