audio/video 加载过程发生的事件 与 所有事件

3,651 阅读2分钟

audio/video在加载过程会依次触发的事件:

  1. loadstart
    刚开始加载 audio/video的时候,触发该事件

  2. durationchange
    当开始加载后时长(duration)更改的时候,触发该事件。
    duration会从NaN变为实际的数值

  3. loadedmetadata
    元数据(metadata)加载完成的时候,触发该事件
    audio/video的元数据包括 时长(duration), 大小(仅video有),文本轨道
    想获取视频的相关信息,该节点(加载完成metadata)就能取到。并不需所有帧都loaded。
    audio/video 在加载过程中,会先加载元数据metadata

  4. loadeddata
    当前帧加载完成,但是没有加载完成下一帧的时候,触发该事件。
    并不是所有帧都加载完成才执行。

  5. progress
    加载(是指刚开始加载,或者更改进度条导致加载)audio/video的时候,触发该事件。

  6. canplay
    当audio/video缓冲足够,可以开始播放play的时候,触发该事件。

  7. canplaythrough
    当audio/video不需要停下来缓冲,就能播放play through的时候,触发该事件。

<html> 
<body> 
<video id="myVideo" width="320" height="176" controls>
  <source src="https://www.w3schools.com/tags/mov_bbb.mp4" type="video/mp4">
  <source src="https://www.w3schools.com/tags/mov_bbb.ogg" type="video/ogg">
  Your browser does not support HTML5 video.
</video>

<script>
    var vid = document.getElementById("myVideo");

    vid.onloadeddata = () => {
            alert('loadeddata')
    }

    vid.onloadedmetadata = () => {
            alert('loadedmetadata')
    }

    vid.ondurationchange = function() {
      alert("The video duration has changed");
    };

    vid.oncanplaythrough = function() {
      alert("Can play through video without stopping");
    };

    vid.onloadstart = function() {
        alert("Starting to load video");
    };

    vid.onprogress = function() {
        alert("Downloading video");
    };

    vid.oncanplay = function() {
        alert("Can start playing video");
    };
</script> 
<p>Video courtesy of <a href="https://www.bigbuckbunny.org/" target="_blank">Big Buck Bunny</a>.</p>
</body> 
</html>

audio/video所有的的事件:

事件描述
abort当音频/视频的加载已放弃时触发。
canplay当浏览器可以开始播放音频/视频时触发。
canplaythrough当浏览器可在不因缓冲而停顿的情况下进行播放时触发。
durationchange当音频/视频的时长已更改时触发。
emptied当目前的播放列表为空时触发。
ended当目前的播放列表已结束时触发。
error当在音频/视频加载期间发生错误时触发。
loadeddata当浏览器已加载音频/视频的当前帧时触发。
loadedmetadata当浏览器已加载音频/视频的元数据时触发。
loadstart当浏览器开始查找音频/视频时触发。
pause当音频/视频已暂停时触发。
play当音频/视频已开始或不再暂停时触发。
playing当音频/视频在因缓冲而暂停或停止后已就绪时触发。
progress当浏览器正在下载音频/视频时触发。
ratechange当音频/视频的播放速度已更改时触发。
seeked当用户已移动/跳跃到音频/视频中的新位置时触发。
seeking当用户开始移动/跳跃到音频/视频中的新位置时触发。
stalled当浏览器尝试获取媒体数据,但数据不可用时触发。
suspend当浏览器刻意不获取媒体数据时触发。
timeupdate当目前的播放位置已更改时触发。
volumechange当音量已更改时触发。
waiting当视频由于需要缓冲下一帧而停止时触发。