简体   繁体   中英

How to change duration of a jQuery animation before it's completed?

Explanation

I'm trying to change duration of a jQuery animation before it's completed, so I wrote the animation's code inside a function, where the duration is a variable. The animation has queue: false to start immediately when the duration's variable is changed and the function is called again with a button.

在此输入图像描述

The problem :

When I click on the mentioned button the animation durantion changes, but when it finish it starts again with the previous duration. Here is a fiddle with the code.

 var dur; function foo(){ $('.content').animate({width: '100%'}, { duration: dur, easing: 'linear', queue: false, done: function(){ $(this).css({width: '0%'}); console.log('Prueba'); } }) }; $('.start').click(function(){ dur = 5 * 1000; foo(); }); $('.dur').click(function(){ dur = 0.5 * 1000; foo(); }); 
 .content { width: 0%; height: 20px; float: left; margin-top: 20px; background: #fdcfa2; border: 1px solid #b18963; color: #b18963; } button { width: 50%; cursor: pointer; padding: 15px 0; float: left; background: #d0fac0; border: 1px solid #6f9b5e; color: #6f9b5e; } button:nth-child(2) { background: #fff4a8; border: 1px solid #b1a763; color: #b1a763; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button class="start">Start</button> <button class="dur">Duration to 0.5 s</button> <div class="content"></div> 

The problem is that after the second animation has finished running, the first animation hasn't yet completed. Simply add a stop() to the previous animation, like this.

function foo(){
    $('.content').stop();  // stops the previous animation if running
    $('.content').animate({width: '100%'},
    {
        duration: dur,
        easing: 'linear',
        queue: false,
        done: function(){
          $(this).css({width: '0%'});
          console.log('Prueba');
        }
    })
};

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM