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.');
});

好吧,总算理解了。

 

posted @ 2017-07-05 11:32  kiera  阅读(342)  评论(0编辑  收藏  举报