所以,我一直在使用一个监听器
document.getElementById("video").buffered.length
我想要检查视频是否已加载并且其大小是否大于0
,对于非常小的视频,这个方法可以使用,并且只在Google Chrome中有效。但它在Firefox中完全无效。有什么想法可以让这个方法在Firefox中也可行吗?
我需要等待3个不同的视频都加载完毕后才能执行特定的操作,应该如何实现?
所以,我一直在使用一个监听器
document.getElementById("video").buffered.length
我想要检查视频是否已加载并且其大小是否大于0
,对于非常小的视频,这个方法可以使用,并且只在Google Chrome中有效。但它在Firefox中完全无效。有什么想法可以让这个方法在Firefox中也可行吗?
我需要等待3个不同的视频都加载完毕后才能执行特定的操作,应该如何实现?
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
更新:
正如其他人所提到的,我原来的解决方案确实有效,但可能会导致性能问题并且其行为有些不可预测。
因此,我建议监听loadeddata
事件。
在此处阅读更多信息:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/loadeddata_event
const videoElement = document.getElementById("my_video");
videoElement.addEventListener('loadeddata', (e) => {
//Video should now be loaded but we can add a second check
if(videoElement.readyState >= 3){
//your code goes here
}
});
==================================
次优解决方案:
我发现使用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);
}
如果您不使用ES6,请将() =>
替换为function()
setInterval
可能会完成任务,但远非理想。我更新了我的答案,提供了一种新的、改进的解决方案,不应该引起性能问题。 - Badrushvideo.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
这是一个关于媒体事件的指南,涵盖了在HTML5中使用的各种事件。这些事件包括:播放、暂停、结束、音量变化等等。通过使用这些事件,您可以为用户提供更好的媒体体验,并控制媒体文件的行为。使用视频元素上的onloadeddata事件。它会检查视频是否已加载。有关更多信息,请参见此参考资料。
当媒体在当前播放位置上的帧完成加载时(通常是第一帧),将触发loadeddata事件。
var video = document.getElementById("video");
video.onloadeddata = function() {
// video is loaded
}
我找到了其他的方法
const video = document.querySelector('video');
video.addEventListener('canplaythrough', (event) => {
console.log('I think I can play through the entire ' +
'video without ever having to stop to buffer.');
});
来源 - https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLMediaElement/canplaythrough_event