`
心语2012
  • 浏览: 45821 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

看jquery源码更好使用API

阅读更多

看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 || [];
  }
}
  1. 参数data存在,如果queue存在或都参数data为数组的话都会重新设置数据缓存
  2. 参数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, jquery ui api, jquery源码分析

    深入理解jQuery源码有助于开发者更好地利用其API并优化性能。主要关注点包括: 1. **选择器引擎(Sizzle)**:jQuery 使用Sizzle作为其选择器引擎,它是如何快速高效地解析CSS选择器并找到匹配元素的。 2. **链式...

    jquery1.11.3 源代码及其中文API打包下载

    《jQuery 1.11.3 源代码与中文API详解》 jQuery,作为一款广泛使用的JavaScript库,因其简洁的语法和强大的功能而深受开发者喜爱。本篇将重点解析jQuery 1.11.3版本的源代码及中文API,帮助读者深入理解其工作原理...

    jQueryAPI(附源码)

    **jQuery API 深度解析** ...通过阅读和理解源码,开发者可以更深入地掌握jQuery的工作原理,从而更好地利用这个强大的工具。结合jQueryAPI.chm文档和jquery.js源码,开发者将能够更有效地利用jQuery进行Web开发。

    Jquery1.8.0和jquery1.8中文Api

    jQuery 1.8.0 的中文API文档对于中国开发者来说尤其有价值,因为它提供了中文解释,帮助开发者更好地理解和使用jQuery的各种方法和函数。API文档通常包含详细的函数描述、参数说明、返回值类型以及示例代码,便于...

    jQuery_easyui+jQuery1.7API

    总结,jQuery EasyUI和jQuery 1.7 API是现代Web开发的强大工具,它们的组合使用能够极大地提高开发效率,简化前端代码,使开发者能专注于构建功能丰富、用户体验优秀的Web应用程序。通过深入理解和熟练掌握这两个...

    jQuery1.4源码及中文帮助API

    《jQuery 1.4 源码及中文帮助API》是一个综合资源包,包含了jQuery库的1.4版本以及相关的中文文档,旨在帮助开发者更好地理解和使用这个强大的JavaScript库。在这个包里,我们可以找到以下关键元素: 1. **jQuery ...

    jQuery Mobile开发源码 api文档中文

    《jQuery Mobile开发源码与API文档中文版》 jQuery Mobile是一款强大...对于初学者,阅读中文API文档和示例代码是入门的最佳途径,而对于进阶开发者,理解源码则能深入理解框架的内部机制,从而更好地定制和优化应用。

    jquery1.2.6源码分析rar + API

    《jQuery 1.2.6 源码分析与API详解》 jQuery 是一个广泛使用的JavaScript库,它极大地简化了...通过对源码的分析和API的熟练运用,我们可以更好地理解和运用JavaScript,为构建高效、易维护的网页应用打下坚实基础。

    JQUERY的API中文文档

    这篇文档将深入探讨jQuery的核心功能及API用法,帮助你更好地理解和运用这个强大的工具。 1. **选择器(Selectors)** jQuery的选择器基于CSS,允许你快速准确地选取页面中的元素。例如,`$("#id")`用于选取ID为...

    JQuery源码详细中文注释_Jquery源码分析_

    《jQuery源码深度解析》 ...深入理解jQuery源码,有助于我们更好地利用它来构建高效、易维护的Web应用。通过阅读中文注释,我们可以更直观地理解每个函数的作用和实现细节,从而提高我们的JavaScript编程能力。

    Jquery1.2.6源码分析+源代码

    本篇文章将深入探讨 jQuery 1.2.6 版本的源码,揭示其背后的实现原理,帮助开发者更好地理解和运用这一经典库。 ### 1. 基本结构 jQuery 的核心函数 `$` 是整个库的入口点。在 1.2.6 版本中,`$` 是一个立即执行的...

    jQuery1.4 api 及 未压缩 js 源码

    《jQuery1.4 API及未...通过深入理解其API并分析源码,我们可以更好地掌握JavaScript库的使用,提升开发效率,同时也能从中学习到优秀的编程实践。无论是初学者还是经验丰富的开发者,jQuery1.4都值得我们深入研究。

    jQuery基础教程+锋利的jQuery+源代码+jquery1.7.2中文API+jquery-1.7.2.min.js.rar

    而"锋利的jQuery+源代码.rar"可能包含书中示例代码,这对于理解书中实例并进行实践至关重要。 学习jQuery,不仅能够提高开发效率,还能让你编写出更加流畅、用户体验更好的网页应用。无论是初学者还是有一定经验的...

    jQuery Mobile源代码.zip

    jQuery Mobile 的源代码是其强大功能的基石,深入学习源码可以帮助我们更好地掌握其工作原理和设计模式。 在源代码中,我们可以看到jQuery Mobile是如何通过数据属性(data-attributes)和页面结构来增强HTML元素的...

    jQuery1.3及jquery1.4.1和jQuery_API.mxp

    **jQuery 1.3 和 jQuery 1.4.1 知识点详解** jQuery 是一个高效、简洁且功能丰富的 JavaScript 库,它极大地简化了 ...通过持续学习和掌握这些知识点,开发者能够更好地利用jQuery实现高效、优雅的JavaScript编程。

    jquery1.7.2 API.CHM中文版

    此外,jQuery 1.7.2还强化了AJAX功能,如$.ajax()、$.get()、$.post()等,提供了更丰富的选项和更好的错误处理机制。$.Deferred对象也得到了进一步完善,支持链式操作,使异步编程更加简洁。 在DOM操作方面,jQuery...

    jquery Highcharts统计图表(实例+源码+中文版API)

    本资源包含了一系列关于jQuery Highcharts的实例、源码以及中文版API,旨在帮助开发者更好地理解和应用Highcharts。 首先,我们要理解jQuery Highcharts的基础知识。Highcharts的核心功能在于提供丰富的图表类型,...

    锋利的jQuery源代码

    理解这部分源代码有助于我们更好地控制页面的动态效果。 此外,jQuery还提供了Ajax、Deferred对象、插件扩展等功能。在源码中,我们还能发现jQuery如何利用JavaScript的原型继承和闭包来实现模块化和插件化的。通过...

    jQuery源代码-1.11.3版(完整有注释)

    学习jQuery源代码,可以帮助我们更好地理解其内部工作原理,从而编写出更高效、更优化的代码。1.11.3版的源码有注释,是学习的好材料,可以深入研究每个函数和方法的具体实现,进一步提升JavaScript技能。

    jquery 源码及API(CHM)下载

    jQuery 是一个广泛使用的...总的来说,这份包含jQuery源码和API的CHM文件是学习和研究jQuery的宝贵资料。通过深入阅读和实践,开发者不仅可以提升JavaScript技能,还能更好地运用jQuery来提高Web开发的效率和质量。

Global site tag (gtag.js) - Google Analytics