0

我的问题可能很简单,但我在互联网上找不到答案,所以我在这里问:

我有以下代码:

function TriggerHeader() {
//doing great stuff
}
function TriggerSlider() {
//doing other stuff
}

在检查完每个条件后,我有一个调用正确触发器的函数。

function Action() {
    $(".content").fadeOut("fast",function () {
    TriggerSlider() {
        TriggerHeader();
    };
});
}

因此,当 (".content").fadeOut 结束时调用 TriggerSlider()(如我所愿),但我正在寻找调用 TriggerHeader(); 的正确方法;当 TriggerSlider() 结束时。我写它的方式是错误的,但我不知道为什么。有人可以启发我吗?

4

4 回答 4

1

这些行在语法上不正确:

TriggerSlider() {
    TriggerHeader();
};

TriggerSlider一旦完成,您必须调整函数以允许回调:

function TriggerSlider(callback) {
    // do stuff
    // ... 
    // now invoke the callback: 
    callback();
    // or pass it to a jQuery function
}

现在您可以像这样设置链:

function Action() {
    $(".content").fadeOut("fast",function () {
        TriggerSlider(TriggerHeader);
    });
}
于 2012-10-02T10:13:25.577 回答
1

这取决于 和 的TriggerSlider内容TriggerHeader

如果它们是同步的:

TriggerSlider();
TriggerHeader();

如果TriggerSlider有一个带有可用回调的动画:

function TriggerSlider(callb) {
   //Most of your code here
   $("element").slideUp(callb);
}
TriggerSlider(TriggerHeader);

使用承诺 API

function TriggerSlider() {
   //Most of your code here
   return $("element").slideUp();
}
$.when(TriggerSlider()).done(TriggerHeader);
于 2012-10-02T10:13:59.573 回答
0

这实际上取决于如何实施TriggerSlider()TriggerHeader()实施。如果他们不做任何涉及超时和“单独线程”的事情,他们一个接一个地调用的方法是:

TriggerSlider();
TriggerHeader();

;-)

另一方面,如果TriggerSlider()包含动画或其他异步的东西,你需要实现它的完成回调作为函数的参数:

function TriggerSlider(completionCallback) {
  setTimeout(500, function() {
    // do something
    // and finally
    completionCallback();
  }
}

现在您可以调用 TriggerSlider 并将其传递给在完成时调用的函数:

TriggerSlider(TriggerHeader);

请注意,我没有通过TriggerHeader(),因为那会调用函数并返回结果。我将函数作为函数传递,函数调用发生在TriggerSlider.

于 2012-10-02T10:13:12.097 回答
0

您遇到的问题是,您正在尝试重新定义 Triggerslider 在按照您的方式编写它时所做的事情TriggerSlider() { //code }。这在语法上是不正确的。

如果您想在滑块之后执行标题功能,这应该可以工作。

function TriggerHeader() {
  //doing great stuff
}

function TriggerSlider() {
  //doing other stuff
  TriggerHeader();
}
function Action() {
   $(".content").fadeOut("fast",function () { TriggerSlider();});
}

使用回调还有其他方法可以解决这个问题。但如果你总是想触发相同的功能,这应该可以工作。

于 2012-10-02T10:17:43.187 回答