javascript - 在 youtube api 中检测播放事件

标签 javascript jquery api youtube event-listener

我正在寻找一种方法来通过 Javascript 检测嵌入式 Youtube 视频中的播放事件。现在我能够检测到状态变化,但我无法弄清楚如何解除绑定(bind)事件并触发另一个事件说它已完成。我也不想使用 add/removeEventListener,因为我猜 IE8 及以下版本没有此功能。

到目前为止我的代码,

    function onYouTubePlayerReady(playerId) {
    console.log('loaded');
    var ytPlayer = document.getElementById(playerId);
    ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
}

function onytplayerStateChange(newState) {
    console.log("Player's new state: " + newState);
    if(newState === 1) {
        sendYtUrl();
     }
}

function sendYtUrl() {
    console.log('play detected');
    ytplayer.removeEventListener("onStateChange");
} 

我希望弹出 sendYtUrl,删除监听器,然后做我需要做的任何事情,或者更好的是,保持它更干净并将其保留在相同的函数中。

提前致谢!

最佳答案

您不必解除绑定(bind) onStateChange event知道视频何时结束或完成。 onStateChange 只需要一个事件监听器。每次发生这些情况时,它都会被触发并返回以下状态:

-1 (unstarted)
0 (ended)
1 (playing)
2 (paused)
3 (buffering)
5 (video cued)

在您的函数 onytplayerStateChange 中,添加另一个 if 语句以在视频完成时捕获:

function onytplayerStateChange(newState) {
    console.log("Player's new state: " + newState);
    if(newState === 1) {
        sendYtUrl();
    } else if(newState === 0) {
        console.log("Video has ended!");
    }
}

关于javascript - 在 youtube api 中检测播放事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12676241/

相关文章:

jquery - 为什么 Jquery 动画第一次运行后速度加快?

android - 使用 android api 创建新的同步日历

api - Foursquare API 结果与 Foursquare 网站上的数据不同

javascript - JavaScript 和浏览器中如何处理循环引用?

javascript - 将 json 对象数组转换为另一个 json 对象

Javascript - 如何调用对象?

laravel - Docker Web 和 api 拒绝连接

javascript - 如何删除部分媒体记录器?

javascript - 多次掷骰子,多种结果

jQuery 禁用按钮不起作用