jQuery $.animate() multiple elements but only fire callback once

孤街醉人 提交于 2019-11-26 08:55:53

问题


If you select a class or collection of elements to animate with jQuery:

$(\'.myElems\').animate({....});

And then also use the callback function, you end up with a lot of unneccessary animate() calls.

var i=1;
$(\'.myElems\').animate({width:\'200px\'}, 200, function(){
    //do something else
    $(\'#someOtherElem\').animate({opacity:\'1\'}, 300, function(){        
        if (i>1) console.log(\'the \'+i+\'-th waste of resources just finished wasting your resources\');
        i++;
    });
});

Arguably this is just bad code and / or design - but is there something I can do that both avoids having many animate() calls with only one of them using the callback, and having a load of unneccessary callbacks executing and screwing with my code / expected behaviour?

Ideally I\'d just be able to code a single \'disposable\' callback that will only run once - otherwise perhaps there is an efficient way to test if something is already being animated by jQuery?

Example: http://jsfiddle.net/uzSE6/ (warning - this will show a load of alert boxes).


回答1:


You could use when like:

$.when($('.myElems').animate({width: 200}, 200)).then(function () {
  console.log('foo');
});

http://jsfiddle.net/tyqZq/

Alternate version:

$('.myElems').animate({width: 200}, 200).promise().done(function () {
  console.log('foo');
});



回答2:


You can create a variable to block second+ callback...

var i=1;
$('.myElems').animate({width:'200px'}, 200, function(){
    //do something else
    $('#someOtherElem').animate({opacity:'1'}, 300, function(){        
        if (i>1) return;
        else
        {
            console.log('the '+i+'-th waste of resources just finished wasting your resources');
            i++;
        }
    });
});

This will only fire once as every subsequent callback will get canceled :)



来源:https://stackoverflow.com/questions/8793246/jquery-animate-multiple-elements-but-only-fire-callback-once

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!