如何让 window.onbeforeunload 等待动画?

Joh*_*ren 5 javascript animation multithreading scriptaculous dom-events

考虑以下 JavaScript 代码,使用动画库(即 scriptaculous)启动。

window.onbeforeunload = function(event) {
    document.body.fade();
}
Run Code Online (Sandbox Code Playgroud)

离开页面是即时的,不需要等待动画完成。尽管我到处都在说 JS 不支持线程,但有些东西在这里并行运行,因为似乎一个不会等待另一个。我对线程的看法是否正确,有什么方法可以实现我在这里要做的事情吗?

Thi*_*aud -1

有点晚了,但我认为给出答案对于未来的 SO 用户来说很有趣。

因此,有多种方法可以将您的代码同步到此,因此您应该添加一个自定义服务员。

window.onbeforeunload = function(event) {
    document.body.fade();
    while ((new Date()).getTime() < (new Date()).getTime()) + (1 *1000));
}
Run Code Online (Sandbox Code Playgroud)

我想你也可以尝试用承诺:

function sleep(time) {
  return new Promise((resolve) => {
    setTimeout(() => {
      return resolve(null);
    }, time);
  });
}

window.onbeforeunload = async function(event) {
    document.body.fade();
    await sleep(1 * 1000);
}
Run Code Online (Sandbox Code Playgroud)