继续阅读队列提供的方法。

jQuery.extend({
    queue: function( elem, type, data ) {}, // 将data按照某种类型存储到elem对应的队列中,并等待执行。同时返回目前队列中的所有数据

dequeue: function( elem, type ) { // 出列操作,如果想要执行队列中的所有方法,则有多少个方法就需要执行多少次dequeue方法

    // 如果指定类型就按照指定类型查找,否则默认是“fx”

    type = type || "fx";

    // 拿出队列中的所有数据

    var queue = jQuery.queue( elem, type ),
      startLength = queue.length,

      // 取出队列(数组)中的第一个值(先进先出),(第一个数据是上一次执行dequeue时添加到队列中的“inprogress”占位符?)
      fn = queue.shift(),

      // ??
      hooks = jQuery._queueHooks( elem, type ),

      // 取出队列中的下一个
      next = function() {
        jQuery.dequeue( elem, type );
      };

    // 当进行出栈操作时,总是删除名为“inprogress”的数据,并继续取下一条。
    if ( fn === "inprogress" ) {
      fn = queue.shift();
      startLength--;
    }

    if ( fn ) {

      // 添加占位符,阻止自动出栈(注释中是这么写的,不明白为什么会自动执行出栈操作)
      if ( type === "fx" ) {
        queue.unshift( "inprogress" );
      }

      // ?
      delete hooks.stop;

      // 执行方法
      fn.call( elem, next, hooks );
    }

    if ( !startLength && hooks ) {
      hooks.empty.fire();
    }

}, // 从elem相应类型对应的队列中下一条数据并执行这条数据
    _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 ] );
      })
    });

  } // 内部使用
});
// 提供给用户的挂载在jQuery对象上的方法
jQuery.fn.extend({

  // 从队列中取数据或者向队列中推数据
    queue: function( type, data ) {    

    var setter = 2;

    // 如果type的类型不是string,说明用户没有传入type,默认使用fx前缀。

    if ( typeof type !== "string" ) {
      data = type;
      type = "fx";
      setter--;
    }

    // 如果参数长度小于setter,说明用户要么只传了type,要么就什么都没传。这个时候用户是想要得到栈中的数据。

    if ( arguments.length < setter ) {

      // 调用挂载到$上的方法,获取到栈中的数据返回
      return jQuery.queue( this[0], type );
    }

    // 如果没有传data,则直接返回this?否则的话为this中的每一个元素都推入一份data到栈中

    return data === undefined ?
      this :
      this.each(function() {
        var queue = jQuery.queue( this, type, data );

        // ?
        jQuery._queueHooks( this, type );

        // 如果type是fx(动画队列)并且队列的当前第一个元素不是inprogress,则取出当前队列的下一个元素并执行

        // 难道说动画队列不需要每个方法执行一下dequeue方法,而是自动执行的?

        if ( type === "fx" && queue[0] !== "inprogress" ) {
          jQuery.dequeue( this, type );
        }
      });

  },
    dequeue: function( type ) { 

    // 执行对象中所有元素对应的队列中的下一个函数

    return this.each(function() {
      jQuery.dequeue( this, type );
    });

  },
    delay: function( time, type ) {},

    clearQueue: function( type ) {},
    promise: function( type, obj ) {}
});

jQuery队列(二)的更多相关文章

  1. js进阶 13-5 jquery队列动画如何实现

    js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...

  2. 微信生成二维码 只需一个网址即刻 还有jquery生成二维码

    <div class="orderDetails-info"> <img src="http://qr.topscan.com/api.php?text ...

  3. jquery 生成二维码

    jquery的二维码生成插件qrcode,在页面中调用该插件就能生成对应的二维码 <!DOCTYPE html> <html> <head> <meta ch ...

  4. MVC5中使用jQuery Post 二维数组和一维数组到Action

    很久没有写了,最近在做一个MVC项目,这是我做的第一个MVC项目.之前可以说多MVC一点都不了解,今天把昨天遇到的一个问题记录下来.MVC大神就请飘过吧,跟我遇到同样问题的可以进来看看.遇到的第一个问 ...

  5. SDUT-2132_数据结构实验之栈与队列二:一般算术表达式转换成后缀式

    数据结构实验之栈与队列二:一般算术表达式转换成后缀式 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 对于一个基于二元运 ...

  6. 强大的JQuery(二)--动画效果

    上篇博客我们讲过了jquery的基础知识--强大的JQuery(一)--基础篇,作为web开发人员,网页的动画效果是不可缺少的,本篇博客重点来说说jquery的动画效果的实现. 因为动画的效果不能截图 ...

  7. 读jQuery之二十(Deferred对象)

    Deferred对象是由$.Deferred构造的,$.Deferred被实现为简单工厂模式. 它用来解决JS中的异步编程,它遵循 Common Promise/A 规范.实现此规范的还有 when. ...

  8. 读jQuery之二十(Deferred对象)--(转)

    原博文地址:http://www.cnblogs.com/snandy/archive/2012/12/19/2812935.html Deferred对象是由.Deferred构造的,.Deferr ...

  9. jQuery队列操作

    jQuery.queue 1."fx"是什么? 队列动画的默认名称 队列的名字为type + "queue",默认是"fxqueue" 2. ...

随机推荐

  1. Console程序后台运行

    [DllImport("User32.dll", EntryPoint = "FindWindow")] private static extern IntPt ...

  2. jQuery实现一个淡入淡出下拉菜单 非常简易

    前段时间我一直在向大家推荐CSS3和HTML5的东西,尽管看上去很炫,但也有不少网友抱怨兼容性问题,所以今天开始我也会陆续向大家介绍一些兼容性较好的jQuery插件.今天先分享一款利用jQuery实现 ...

  3. Git介绍及安装配置

    一.概述 1.1git概念 Git是一个开源的分布式版本控制系统,用于敏捷高效处理任意规模的项目,其作者为Linux创造者Linus Torvalds为管理Linux内核而开放的一个开源的版本控制柔软 ...

  4. iOS : 判断运行设备类型是否是iPad

    以下代码由 CocoaChina 版主 “cclv” 分享,可用于判断应用运行的设备是否是 iPad #define isPad (UI_USER_INTERFACE_IDIOM() == UIUse ...

  5. js简单Base64编码解码

    var str = 'javascript'; window.btoa(str) //转码结果 "amF2YXNjcmlwdA==" window.atob("amF2Y ...

  6. Java单例模式的应用

    单例模式用于保证在程序的运行期间某个类有且仅有一个实例.其优势在于尽可能解决系统资源.通过修改构造方法的访问权限就可以实现单例模式. 代码如下: public class Emperor { priv ...

  7. Java终止循环体

    编写程序,是先创建一个字符串数组,在使用foreach语句遍历时,如果发现数组中包含字符串“老鹰”则立刻中断循环.再创建一个整数类型的二维数组,使用双层foreach语句循环遍历,当发现第一个小于60 ...

  8. Dubbo -- 系统学习 笔记 -- 示例 -- 多版本

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 多版本 当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间 ...

  9. Spring-----配置及对象初始化(1)

    一,配置文件进行Spring初始化 1,配置文件编写 <?xml version="1.0" encoding="utf-8" ?> <con ...

  10. ios开发之--UITextField光标右移

    有时候,我们直接使用TF进行操作,有时候需要裁剪,但是裁剪后,光标还是置顶的,很不美观,解决办法: // 设置一个空白View,15.0就是这块View的宽度width,也是光标的位置,根据需要设定大 ...