在Javascript中判断视频是否已加载

Fen*_*Huo 29 javascript video html5 loaded

所以,我一直在使用听众

document.getElementById("video").buffered.length
Run Code Online (Sandbox Code Playgroud)

看它是否比0视频加载时更大.这适用于非常小的视频,仅适用于Google Chrome.它根本不适用于Firefox.有关如何使其工作的任何想法?

我本来想等到加载3个单独的视频来采取具体行动,我该如何解决这个问题?

Šim*_*das 42

试试这个:

var video = document.getElementById("video-id-name");

if ( video.readyState === 4 ) {
    // it's loaded
}
Run Code Online (Sandbox Code Playgroud)

请在此处阅读:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState

  • 这个答案没有意义.这并不是真正倾听变化.这只会在页面首次加载时运行,如果它立即就绪,它只会起作用. (11认同)
  • @奥马尔你是对的。当发布真正的解决方案时,我可以删除我的答案。 (2认同)

Bad*_*ush 11

我发现通过每半秒检查一次,直到它加载setInterval时,使用工作来主动收听readyState视频的变化.

checkforVideo();

function checkforVideo() {
    //Every 500ms, check if the video element has loaded
    var b = setInterval(()=>{
        if(VideoElement.readyState >= 3){
            //This block of code is triggered when the video is loaded

            //your code goes here

            //stop checking every half second
            clearInterval(b);

        }                   
    },500);
}
Run Code Online (Sandbox Code Playgroud)

如果你不使用ES6只需更换() =>function()

  • 很好的答案!仅供参考,这一切所做的只是检查视频元素的简单属性。它使用的处理能力非常少,因此在检查之间实际上不需要等待半秒。您可以将其更改为 10 毫秒,并在几乎加载视频的同时捕获视频。 (2认同)
  • 这太糟糕了。 (2认同)
  • 这个答案很棒,但它阻塞了主线程,我试图在那里显示一个微调器......微调器动画每秒都会冻结。 (2认同)

efa*_*faj 6

要使其成为侦听器,通常情况下,您需要侦听suspend事件。当出于任何原因暂停或停止下载(包括完成下载)时,都会触发该事件。

您还需要收听播放内容已加载的情况(例如,从缓存中)的情况

video.addEventListener("playing", function() {
    console.log("[Playing] loading of video");
    if ( video.readyState == 4 ) {
        console.log("[Finished] loading of video");
    }
});
video.addEventListener("suspend", function(e) {
    console.log("[Suspended] loading of video");
    if ( video.readyState == 4 ) {
        console.log("[Finished] loading of video");
    }
});
Run Code Online (Sandbox Code Playgroud)

来源:https : //developer.mozilla.org/en/docs/Web/Guide/Events/Media_events