jQuery 队列控制函数:.queue()

.queue() 显示或操作匹配元素所执行函数的队列。

所以它和那些常见的animate()、fadeIn()、fadeOut()、slideUp()、show()、hide()动画函数,有什么区别?

如果说,

$(‘#foo‘).slideUp().fadeIn();

当这条语句执行时,元素会立即开始其滑动动画,但是淡入过渡被置于 fx 队列,只有当滑动过渡完成后才会被调用。

这句话意思是,动画会先开始执行滑动,再进行淡入过渡。

那么用了queue()方法,能产生什么不一样的效果?

.queue() 方法允许我们直接对这个函数队列进行操作。调用带有回调函数的 .queue() 方法特别有用;它允许我们在队列末端放置一个新函数。

这个特性与动画方法提供回调函数类似,但是无需在动画执行时设置回调函数。

如果要执行的函数不仅仅是动画,还有文档操作比如append(),css属性操作呢。

来试验个最简单的。

<style>

div {width:40px; height:40px;
background:green; }

.newcolor { background:blue; }
</style>
<body>
<div> </div>
<script>
$(document.body).click(function () {
      $("div").show("slow");
      $("div").animate({left:‘+=200‘},2000);
      $("div").addClass("newcolor");
    });
</script>
</body>

这个动画按照设定,是要这个 div 先缓缓出现,向右滑动,再执行css属性操作,改变背景颜色为蓝色。

然而这样写的结果,实际上是 div在出现前已经变成了蓝色。

因为一系列的动画函数会被放进一个队列中,我们管他叫 ‘fx‘, 而非动画函数,不会进入这个队列,它会先于队列函数执行。

而queue()就是来解决这个问题的。

queue()可以将非动画函数加进队列。

  <style>
  div { margin:3px; width:40px; height:40px;
        position:absolute; left:0px; top:30px;
        background:green; display:none; }
  div.newcolor { background:blue; }
  </style>

  <script type="text/javascript" src="/jquery/jquery.js"></script>
</head>

<body>

  请点击这里 ...
  <div></div>

<script>$(document.body).click(function () {
      $("div").show("slow");
      $("div").animate({left:‘+=200‘},2000);
      $("div").queue(function () {
        $(this).addClass("newcolor");
        $(this).dequeue();
      });
      $("div").animate({left:‘-=200‘},500);
      $("div").queue(function () {
        $(this).removeClass("newcolor");
        $(this).dequeue();
      });
      $("div").slideUp();
    });</script>

</body>

OK,这样就达到了我们要的效果。

再看上面那句话:

调用带有回调函数的 .queue() 方法特别有用;它允许我们在队列末端放置一个新函数。

这个特性与动画方法提供回调函数类似,但是无需在动画执行时设置回调函数。

语法: .queue(queueName,newQueue)

我们加入的函数其实是一个关于队列的回调函数。这个回调函数可以放在动画函数里,作为动画函数的回调函数。

比如,queue队列函数:

$(‘#foo‘).slideUp();
$(‘#foo‘).queue(function() {
  alert(‘Animation complete.‘);
  $(this).dequeue();
});

等价于:

$(‘#foo‘).slideUp(function() {
  alert(‘Animation complete.‘);
});

好吧,总算理解了。

时间: 2024-11-01 21:31:29

jQuery 队列控制函数:.queue()的相关文章

jquery源码解析:jQuery队列操作queue方法实现的原理

我们先来看一下jQuery中有关队列操作的方法集: 从上图可以看出,既有静态方法,又有实例方法.queue方法,相当于数组中的push操作.dequeue相当于数组的shift操作.举个例子: function aaa(){ alert(1); } function bbb(){ alert(2); } $.queue(document,"q1",aaa);   //在document下创建一个队列q1,并往q1队列中添加aaa函数. $.queue(document,"q1

JQuery队列queue与原生模仿其实现

jQuery中的queue和dequeue是一组很有用的方法,他们对于一系列需要按次序运行的函数特别有用.特别animate动画,ajax,以及timeout等需要一定时间的函数. queue() 方法显示或操作在匹配元素上执行的函数队列. queue和dequeue的过程主要是: 用queue把函数加入队列(通常是函数数组)k7娱乐城 用dequeue将函数数组中的第一个函数取出,并执行(用shift()方法取出并执行) 也就意味着当再次执行dequeue的时候,得到的是另一个函数了.同时也意

jQuery 源码分析(十一) 队列模块 Queue详解

队列是常用的数据结构之一,只允许在表的前端(队头)进行删除操作(出队),在表的后端(队尾)进行插入操作(入队).特点是先进先出,最先插入的元素最先被删除. 在jQuery内部,队列模块为动画模块提供基础功能,负责存储动画函数.自动出队并执行动画函数,同时还要确保动画函数的顺序执行. jQuery的静态方法含有如下API: $.queue(elem,type,data) ;返回或修改匹配元素关联的队列,返回最新的队列,参数如下:   elem ;DOM元素或JavaScript对象 type  ;

C# 队列(Queue)

队列(Queue)代表了一个先进先出的对象集合. using System; using System.Collections; namespace CollectionsApplication { class Program { static void Main(string[] args) { Queue q = new Queue(); q.Enqueue('A'); q.Enqueue('M'); q.Enqueue('G'); q.Enqueue('W'); Console.Write

初学图论-Dijkstra单源最短路径算法基于优先级队列(Priority Queue)的实现

这一次,笔者使用了STL库中的优先级队列(Priority Queue)来完成Dijkstra算法中extract-min()语句(即从未选中的节点中选取一个距离原点s最小的点)的功能.由于优先级队列的插入.删除操作只需要logn的时间花费,因此降低了不少运行时间. 本文使用C++实现了这一基本算法.参考<算法导论>第24.3节. /**  * Dijkstra's Single Source Shortest Path Algorithm in C++  * Time Cost : O(Ml

队列(Queue)

队列(Queue) Queue: 先入先出(FIFO)的数据结构. offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝. 这时新的 offer 方法就可以起作用了.它不是对调用 add() 方法抛出 一个 unchecked 异常,而只是得到由 offer() 返回的 false. poll,remove区别: remove() 和 poll() 方法都是从队列中删除第一个元素(head).remove() 的行为与 Collection 接

从头认识java-15.6 队列(Queue)

这一章节我们来讨论一下队列(Queue). 1.什么是队列? 队列是一种特殊的线性表,特殊之处在于它仅仅同意在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样.队列是一种操作受限制的线性表. 2.特性 (1)元素是有序的 (2)元素是先进先出 3.java里面的实现类:Linkedlist和PriorityQueue,两者之间性能不存在区别,区别的地方是排序的行为. package com.ray.ch14; import java.util.LinkedLis

jQuery队列动画

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>jQuery队列动画</title> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script> <script

优先级队列(Priority Queue)

优先级队列(Priority Queue) 注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素.但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素,这种队列就是优先级队列(Priority Queue),也称为优先权队列. 1. 优先级队列的概念 1.1 优先级队列的定义 优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. 1.2 优先级队列的特点 优先级队列是0个或多个元素的集合,每个元素都有一个优先权或值