What are queues in jQuery?

前端 未结 6 559
萌比男神i
萌比男神i 2020-11-22 01:09

I found the jQuery.com document on queue()/dequeue() is too simple to understand. What exactly are queues in jQuery? How should I use them?

6条回答
  •  借酒劲吻你
    2020-11-22 01:51

    To understand queue method, you have to understand how jQuery does animation. If you write multiple animate method calls one after the other, jQuery creates an 'internal' queue and adds these method calls to it. Then it runs those animate calls one by one.

    Consider following code.

    function nonStopAnimation()
    {
        //These multiple animate calls are queued to run one after
        //the other by jQuery.
        //This is the reason that nonStopAnimation method will return immeidately
        //after queuing these calls. 
        $('#box').animate({ left: '+=500'}, 4000);
        $('#box').animate({ top: '+=500'}, 4000);
        $('#box').animate({ left: '-=500'}, 4000);
    
        //By calling the same function at the end of last animation, we can
        //create non stop animation. 
        $('#box').animate({ top: '-=500'}, 4000 , nonStopAnimation);
    }
    

    The 'queue'/'dequeue' method gives you control over this 'animation queue'.

    By default the animation queue is named 'fx'. I have created a sample page here which has various examples which will illustrate how the queue method could be used.

    http://jsbin.com/zoluge/1/edit?html,output

    Code for above sample page:

    $(document).ready(function() {
        $('#nonStopAnimation').click(nonStopAnimation);
    
        $('#stopAnimationQueue').click(function() {
            //By default all animation for particular 'selector'
            //are queued in queue named 'fx'.
            //By clearning that queue, you can stop the animation.
            $('#box').queue('fx', []);
        });
    
        $('#addAnimation').click(function() {
            $('#box').queue(function() {
                $(this).animate({ height : '-=25'}, 2000);
                //De-queue our newly queued function so that queues
                //can keep running.
                $(this).dequeue();
            });
        });
    
        $('#stopAnimation').click(function() {
            $('#box').stop();
        });
    
        setInterval(function() {
            $('#currentQueueLength').html(
             'Current Animation Queue Length for #box ' + 
              $('#box').queue('fx').length
            );
        }, 2000);
    });
    
    function nonStopAnimation()
    {
        //These multiple animate calls are queued to run one after
        //the other by jQuery.
        $('#box').animate({ left: '+=500'}, 4000);
        $('#box').animate({ top: '+=500'}, 4000);
        $('#box').animate({ left: '-=500'}, 4000);
        $('#box').animate({ top: '-=500'}, 4000, nonStopAnimation);
    }
    

    Now you may ask, why should I bother with this queue? Normally, you wont. But if you have a complicated animation sequence which you want to control, then queue/dequeue methods are your friend.

    Also see this interesting conversation on jQuery group about creating a complicated animation sequence.

    http://groups.google.com/group/jquery-en/browse_thread/thread/b398ad505a9b0512/f4f3e841eab5f5a2?lnk=gst

    Demo of the animation:

    http://www.exfer.net/test/jquery/tabslide/

    Let me know if you still have questions.

提交回复
热议问题