2011-12-30 21 views
19

Vì vậy, tôi đã sử dụng một người biết lắng nghe trênTrả lời xem video được tải hay không trong Javascript

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

để xem nếu nó lớn hơn 0 khi một video được tải hay không. Tính năng này hoạt động cho một video rất nhỏ và chỉ trong Google Chrome. Nó không hoạt động trong Firefox. Bất kỳ ý tưởng nào về cách làm việc này?

Tôi về cơ bản muốn đợi cho đến khi 3 video riêng biệt được tải để thực hiện một hành động cụ thể, làm cách nào để tôi thực hiện việc này?

Trả lời

32

Hãy thử điều này:

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

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

đọc ở đây: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/readyState

+0

Trình duyệt nào hỗ trợ thuộc tính đó? –

+0

@JaredFarrish Theo [Wiki] này (http://en.wikipedia.org/wiki/Comparison_of_layout_engines_%28HTML5_Media%29), hỗ trợ đã hoàn thành (Cột WebKit trống, nhưng tôi sẽ ngạc nhiên nếu việc triển khai của họ bị chậm lại Mozilla/Opera). –

+1

> hơn 1 có thể thực hiện mẹo nếu đó chỉ là tìm kiếm. – Costa

2

Để làm điều này thành một người biết lắng nghe, trong trường hợp bình thường, bạn sẽ muốn lắng nghe những sự kiện đình chỉ. Nó được kích hoạt khi tải xuống bị tạm dừng hoặc dừng vì bất kỳ lý do gì, kể cả quá trình tải xuống đã hoàn tất.

Bạn cũng sẽ muốn nghe chơi cho các trường hợp khi nội dung đã được nạp (như, từ bộ nhớ cache)

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"); 
    } 
}); 

Nguồn: https://developer.mozilla.org/en/docs/Web/Guide/Events/Media_events

0

tôi thấy sử dụng setInterval làm việc cho chủ động lắng nghe để khi readyState trong những thay đổi video bằng cách kiểm tra mỗi nửa giây cho đến khi nó tải trong.

checkforVideo(); 

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

      \\do whatever you want done here 

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

Nếu bạn không USI ng ES6 chỉ cần thay thế () => bằng function()

Các vấn đề liên quan