新的jQuery API允许在链接期间进行同步操作?

时间:2011-04-15 19:27:05

标签: jquery animation

除非我弄错了,因为自jQuery 1.5以来,你可以以某种方式进行链接并插入一个命令让它等待上一个操作完成。换句话说,而不是:

$('#something').animate({opacity: 0}, 500, function() { $('#something').hide(); });

你可以这样做:

$('#something').animate({opacity: 0}, 500).waitForIt().hide();

当然我错了。我知道有一个延迟()和animate()的“队列”选项,但我认为这些只适用于可排队的FX,而不是像show / hide这样的单一镜头。

2 个答案:

答案 0 :(得分:2)

您在哪里找到该功能的提及?据我所知,即使jQuery 1.5的deferred objects也不能轻易用到animate()

幸运的是,Dan Heberden写了some very nice code,这使得语法更加清晰。使用他的解决方案,您可以编写如下内容:

var $something = your$('#something');
$.when($something.animate({opacity: 0}, 500)).done(function() {
    $something.hide();
});

当然,比起简单地将回调传递给animate()更加冗长。

编辑: jQuery 1.6现在可以原生地实现该功能。你实际上可以这样做:

var $something = $('#something');
$.when($something.animate({opacity: 0}, 500)).done(function() {
    $something.hide();
});

对于简单的动画来说,这仍然有点过分,但如果你已经在使用延迟对象并希望将动画合并到你的AJAX请求流中,这非常有用。

答案 1 :(得分:1)

可以做的是:

var animationTime = 500;
$('#something').animate({opacity: 0}, animationTime, function(){
    $(this).hide();
})

工作小提琴:http://jsfiddle.net/maniator/VbANC/32/

作为animate调用的最后一个参数的函数仅在动画运行其路线后运行 任何waitForIt电话都没有我的知识。

我为延迟jQuery调用做了一个插件:

http://jsfiddle.net/maniator/Ad3pv/

这样称呼:

$('div').waitForit({
    function: 'hide', 
    timeOut: 1000
});