当我在没有任何参数的jQuery集合上调用promise
方法时,我得到一个承诺,一旦集合中元素的所有动画完成,它就会解析。对该元素进行相同方法的每次进一步调用都将返回相同的承诺。是否有一种直接的方式来重置"承诺,以便一旦初始动画完成并且初始承诺已经解决,我可以处理下一个动画何时完成?
$('.some-element').slideDown();
$('.some-element').promise().done(function () {
// e.g. evaluate the "display" property of the element which should not be "none"
this.slideUp();
this.promise().done(function () {
// e.g. evaluate the "display" property of the element which should be "none"
});
});
上面代码中的问题是对promise
的第二次调用返回与第一次调用相同的承诺。由于该承诺已经解决,第二个处理程序中的评估显示"显示"财产不是"没有"因为slideUp
动画尚未完成。
答案 0 :(得分:0)
尝试
$(function () {
function slider(d, next, callback) {
$("div").slideUp({
duration: d,
done: function (promise) {
if (promise.state() === "resolved"
&& $(this).css("display") === "none") {
console.log($(this).css("display"));
$(this).slideDown({
duration: d,
done: function (promise) {
if (promise.state() === "resolved"
&& $(this).css("display") === "block") {
console.log($(this).css("display"));
slider(next, (d + next) / 2, function () {
console.log("next animation beginning at "
+ $.now());
});
}
},
complete: function () {
return callback != undefined ? callback() : $.noop();
}
});
};
}
});
};
slider(3000, 1500, function () {
console.log("next animation beginning at " + $.now())
});
});
jsfiddle http://jsfiddle.net/guest271314/3xdmD/
在options
,start
,progress
,done
always
上查看http://api.jquery.com/slideup/,http://api.jquery.com/slidedown/ promises
);另请参阅step
,complete
回调
答案 1 :(得分:-1)
您可以将一系列承诺传递给$.when
,如documentation