gpt4 book ai didi

javascript - 如何防止回调多次触发?

转载 作者:行者123 更新时间:2023-11-29 17:21:28 27 4
gpt4 key购买 nike

我在这里看到了几个与此相关的问题(包括使用 when/promise 解决方案),但它们似乎没有用。基本上我一次为多个元素设置动画,并在回调内部调用一个函数,但该函数被多次调用 - 对于每个元素都设置了动画……这是我的代码:

OBJCollection.css({
'width': '0em',
'height': '0em'
}).animate({
'width': Screens.ImageW / 16 + 'em',
'height': Screens.ImageH / 16 + 'em'
}, {
duration: Screens.currentImageParent.data('LightboxFadeSpeedIn'),
queue: false,
step: function (now, fx) {
componentScaler();
},
complete: function () {
$Content.show('fade', Screens.currentImageParent.data('ContentFadeSpeedIn'));
//calling function here
}
});

我尝试过:

if (!OBJCollection.is(':animated')) { ... call function }

这没有用。我也尝试过 when 的解决方案,但这似乎会影响我的函数调用(它根据 OBJCollection 的最终动画大小定位其他元素)。我不确定(因为这是我第一次使用 when/promise),但是它是否在第一个项目完成动画并忽略所有其他项目后触发一次回调?看起来这就是它正在做的事情,但我正在寻找一种解决方案,当所有项目都完成动画时触发回调....

有什么想法吗?

最佳答案

使用 promise 对象。

OBJCollection.css({
'width': '0em',
'height': '0em'
}).animate({
'width': Screens.ImageW / 16 + 'em',
'height': Screens.ImageH / 16 + 'em'
}, {
duration: Screens.currentImageParent.data('LightboxFadeSpeedIn'),
queue: false,
step: function(now, fx) {
componentScaler();
}
}).promise().done(function() {
$Content.show('fade', Screens.currentImageParent.data('ContentFadeSpeedIn'));
//calling function here
});​

关于javascript - 如何防止回调多次触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414921/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com