Скажите, загружено ли видео или нет в Javascript

Итак, я использовал слушателя на

document.getElementById("video").buffered.length

чтобы увидеть, если это больше, чем 0 для того, когда видео загружено или нет. Это работает для очень небольшого видео, и только в Google Chrome. Он вообще не работает в Firefox. Есть идеи, как заставить это работать?

Я по существу хочу подождать, пока не загрузятся 3 отдельных видео, чтобы предпринять определенное действие, как мне это сделать?

4 ответов


попробуйте это:

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

if ( video.readyState === 4 ) {
    // it's loaded
}

читайте здесь:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState


использование setInterval работает для активного прослушивания, когда readyState видео изменяется, проверяя каждые полсекунды, пока оно не загрузится.

checkforVideo();

function checkforVideo() {
    var b = setInterval(()=>{
        if(VideoElement.readyState >= 3){

            \do whatever you want done here

            \you can now stop checking every half second
            clearInterval(b);

        }                   
    },500);
}

если вы не используете ES6, просто замените () => С function()


чтобы сделать это слушателем, при нормальных обстоятельствах вы захотите прослушать событие 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");
    }
});

источник:https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events


var video = document.getElementById("video");
video.onloadeddata = function() {
    // video is loaded
}