setTimeout 与 addEventListener 的问题

Trouble with setTimeout with addEventListener

我有一个 vimeo 视频,我想在单击按钮后播放 3 秒。我可以让视频在点击时播放,但我似乎无法在正确的位置设置 setTimeout...有什么建议吗?

var iframe1 = document.getElementById("prelearn-1");
var player1 = $f(iframe1);

var prelearnBtn = document.getElementById("prelearn-1-btn");
prelearnBtn.addEventListener("click", setTimeout(function(){player1.api("play")}, 3000));

我正在使用 vimeo froogaloop API。

只需将它包装在一个函数中 -

prelearnBtn.addEventListener("click", function(){
    setTimeout(function(){
        player1.api("play");
    }, 3000);
});

setTimeout 函数接受回调 函数。只需将您的代码包装在一个匿名函数中,然后它就可以工作了。此外,如果您尝试访问 iFrame 的内容,则可能会遇到跨域问题。

var iframe1 = document.getElementById("prelearn-1");
var player1 = $f(iframe1);

var prelearnBtn = document.getElementById("prelearn-1-btn");
prelearnBtn.addEventListener("click", function(){setTimeout(function(){player1.api("play")}, 3000)});

AddEventlistener 将匿名函数作为第二个参数。所以你需要将 setTimeout 包裹在匿名函数中。每当点击事件发生时,setTimeout 代码将触发并播放视频。

prelearnBtn.addEventListener("click", function () {
    setTimeout(function () {
        player1.api("play")
    }, 3000)
}, false);

ES2015 更短的语法 + 利用 setTimeout 第三个参数 将使我们的代码更短更好,同时保持它可读:

document.querySelector('button').addEventListener("click",() => 
  setTimeout(console.log, 1000, "play")
)
<button>Play</button>

为了打印参数,上面的示例将 OP 的 player1.api 方法替换为 console.log,这说明代码有效。