在最后一个元素完成其 jQuery 滑动效果后,如何 运行 编码?

how do I run code after the last element has completed its jQuery slideup effect?

如果我有一个 运行 的 .slideUp() 反对属于多个元素的 class,我如何 运行 在 最后一个代码之后 元素已经完成了它的滑动效果?似乎使用内置的完整回调 运行 是在每个单独的元素完成其滑动之后的回调,而不是在它们全部完成时执行一次。

下面是一些示例代码,可能有助于说明我遇到的问题:

$("#my-button").click(() => {
  $(".my-target-class").slideUp(400, () => {
    console.log("I only want this to fire once...");
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
    <div class="my-target-class">div 1</div>
    <div class="my-target-class">div 2</div>
    <div class="my-target-class">div 3</div>
    <button id="my-button">try me</button>
</section>

在 jQuery 中,这实际上会在所有元素上 运行 您的 slideUp包括 它的回调),因此回调也会触发几次。

您可以使用 .promise 来获得对整个操作的承诺,并对其作出反应 done:

$("#my-button").click(() => {
  $(".my-target-class").slideUp(400).promise().done(() => {
    console.log("I only want this to fire once...");
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
    <div class="my-target-class">div 1</div>
    <div class="my-target-class">div 2</div>
    <div class="my-target-class">div 3</div>
    <button id="my-button">try me</button>
</section>

看来你应该将 div 容器化并且只向上滑动那个:

$("#my-button").click(() => {
  $(".target-container").slideUp(400, () => {
    console.log("I only want this to fire once...");
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>
  <div class="target-container">
    <div class="my-target-class">div 1</div>
    <div class="my-target-class">div 2</div>
    <div class="my-target-class">div 3</div>
  </div>
  <button id="my-button">try me</button>
</section>