javascript - HTML5 音频 : Using both oncanplay and oncanplaythrough events for audio

标签 javascript html events audio

我被告知要同时使用 oncanplayoncanplaythrough 事件,因为 oncanplay 在某些浏览器中可能不可靠:

在我的代码中,我只使用了 oncanplay 事件。如何设置我的代码,以便我能够像我被告知的那样使用这两个事件?

// player is an HTML5 Audio Element

player.oncanplay = function () {
        if (value.value !== "") {
            canPlay = true;
            playPauseIcon(true);
        }
    };  

我的完整代码 list 在这里:https://jsfiddle.net/vhgL96se/142/

最佳答案

如果您担心 canplay 事件没有触发,您可以结合使用 canplaythroughcanplay 事件。根据您的代码,应该可以或多或少地为两个事件重用相同的事件处理程序。

考虑以下更改,即使用 addEventListener() 为这两个事件注册处理程序,以及声明一个具有稍微修改逻辑的通用处理程序函数:

// Define a common handler function that will be reused for
// both events
function playerMediaPlayable() {

    // Add canPlay !== true to prevent playPauseIcon() being
    // called a second time if 'canplaythrough' fires after 'canplay'
    if (value.value !== "" && canPlay !== true) {

        canPlay = true;
        playPauseIcon(true);
    }
}

// Use playerMediaPlayable handler for both events
player.addEventListener('canplay', playerMediaPlayable);
player.addEventListener('canplaythrough', playerMediaPlayable);  

希望对您有所帮助!

关于javascript - HTML5 音频 : Using both oncanplay and oncanplaythrough events for audio,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54103004/

相关文章:

c# - 在调用 DoDragDrop 方法后执行拖放实现

c# - 是否有任何理由在引发事件之前将事件分配给局部变量?

javascript - Cordova 应用程序从头开始,关于 ngCordova、Ionic 和 Typescript 的决定

javascript - 无法使用 localhost node.js/express.js 服务器加载 html 图像

javascript - 在 Angular 5 中单击时创建按钮微调器

javascript - 从指令生成的 html 范围内调用函数?

phpmyadmin blob php image out encrypted, 想在网页上显示blob图片

html - 每个显卡的 CSS 填充看起来不同

javascript - JQuery 模糊事件

javascript - 在 Fancybox 中阻止 JavaScript