Sự kiện onprogress kích hoạt định kỳ trong quá trình tải dữ liệu media (video/audio). Dùng để hiển thị tiến trình tải (loading bar), khác với onloadeddata (chỉ khung đầu).
Ví dụ
<!DOCTYPE html>
<html>
<body>
<video id="myVideo" width="320" height="176" controls onprogress="display()">
<source src="/html5/foo.ogg" type="video/ogg" />
<source src="/html5/foo.mp4" type="video/mp4" />
Trình duyệt không hỗ trợ HTML5 video.
</video>
<script>
function display() {
console.log("Đang tải...", document.getElementById('myVideo').buffered);
}
</script>
</body>
</html>
Buffered Range
Dùng video.buffered (TimeRanges) để biết phần nào đã tải:
const video = document.querySelector('video');
video.addEventListener('progress', () => {
if (video.buffered.length > 0) {
const bufferedEnd = video.buffered.end(video.buffered.length - 1);
const percent = (bufferedEnd / video.duration) * 100;
console.log(`Đã tải: ${percent.toFixed(1)}%`);
}
});
Các sự kiện tải media (thứ tự)
- loadstart
- durationchange
- loadedmetadata
- progress (lặp lại nhiều lần)
- canplay
- canplaythrough
Lưu ý
progresscũng có trên<audio>vàXMLHttpRequest/fetch(upload/download).- Không kích hoạt nếu media cached (đã tải trước).