我做了一个回调函数,该函数应在之后启动

$('.menuIco').not($(this)).fadeOut()


但是我有9个回调(而不是1个回调)(可能是由于not($(this))导致了10-1 = 9个元素)。

为什么?以及如何预防呢?

我正在使用带有变量的解决方法,但是在我看来,它并不是太专业。

var loaded = false;

$('.menuIco').not($(this)).fadeOut(function() { // hide all icons but one
    if(loaded==false) {
        loaded = true;

        $('.menuIco p').addClass("icoCaptionOff");
        $(menuIco).animate({top: "20", left: "-100"}, "fast", function() {
            LoadContent($(menuIco).attr('id'));

        });
    }
});

最佳答案

您可以使用.promise()在所有元素的动画制作完成后执行回调


  .promise()方法返回动态生成的Promise,即
  一旦将某种类型的所有动作绑定到集合,就解决了,
  是否排队,已经结束。
  
  默认情况下,类型为“ fx”,这意味着返回的Promise已解决
  所选元素的所有动画均已完成时。


$('.menuIco').not(this).fadeOut().promise().done(function () {
    $('.menuIco p').addClass("icoCaptionOff");
    $(menuIco).animate({
        top: "20",
        left: "-100"
    }, "fast", function () {
        LoadContent($(menuIco).attr('id'));

    });
});

09-16 22:27