【发布时间】:2019-10-10 19:24:06
【问题描述】:
我有一系列延迟操作,作为 $.when() .done() 的一部分发生
$.when(
$activeHighlight.removeClass('active'),
$nextHighlight.addClass('active'),
$nextHighlight.fadeIn(250),
scrollToActiveHighlightConfirmationSlide(0),
).done(
lazyloadHighlightConfirmationHighlights.load($nextHighlightImage[0])
);
这很好用!但是,每当我尝试使用调用动画的函数来为这一系列事件开头时,它似乎永远不会“等待”动画完成后再继续。
这是我尝试构建它的方式:
function slideLeft() {
$activeHighlightImage.animate(
{
left: -$activeHighlightImage.width(),
opacity: "0",
}, 200);
}
$.when(
slideLeft()
).done(
$activeHighlight.hide(),
$.when(
$activeHighlight.removeClass('active'),
$nextHighlight.addClass('active'),
$nextHighlight.fadeIn(250),
scrollToActiveHighlightConfirmationSlide(0),
).done(
lazyloadHighlightConfirmationHighlights.load($nextHighlightImage[0])
),
)
我可以单独运行动画,而且效果很好,所以在将其添加为延迟事件时,我一定会遗漏一些东西。
理想情况下,它会是这样的......
- slideLeft,耗时 200 毫秒
- (等待200ms,同时上述动画完成)
- $activeHighlight.hide()
- 立即准备通过完成 .when() 函数来展示新的亮点
- 然后,在 .done() 上,调用lazyloader 加载新的高亮图像。
发生类似数字 2 的事情是我目前遇到问题的地方......
有什么想法吗?
【问题讨论】:
-
return $activeHighlightImage.animate(...).promise()(甚至可能不需要 .promise()) -
嗨@KevinB!感谢您的加入。不幸的是,它仍然不起作用......似乎我需要一种方法来延迟通过 .done() 函数的初始进程。类似于
slideLeft().delay(200)的东西,但这也不完全符合我的要求......
标签: jquery jquery-animate jquery-deferred