zoukankan      html  css  js  c++  java
  • jQuery 队列控制函数:.queue()

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

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

    如果说,

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

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

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

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

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

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

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

    来试验个最简单的。

    <style>

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

    好吧,总算理解了。

  • 相关阅读:
    主机与虚拟机之间的网络连接
    QT下过多点的曲线绘制
    C++返回对象和返回引用
    STS MVC与MyBatis的结合
    STS中依赖项的设置
    STS中MyBatis的基本实现
    STS中不同包但相同类名引起的问题:A component required a bean of type 'javax.activation.DataSource' that could not be found
    STS中AOP的实现
    STS如何将一个文件夹设置缺省的创建路径(build path)
    ARB扩展与标准OpenGL的关系
  • 原文地址:https://www.cnblogs.com/dodocie/p/7120405.html
Copyright © 2011-2022 走看看