H5中video的事件的触发顺序是怎样的?

H5 video 元素的事件触发顺序比较复杂,会根据网络状况、用户交互等因素而变化。以下列出一些关键事件及其大致的触发顺序,并解释一些容易混淆的情况:

1. 加载阶段:

  • loadstart: 视频开始加载时触发。这是第一个触发的事件。
  • durationchange: 视频时长信息获取到后触发。可能在 loadedmetadata 之前或之后触发,取决于浏览器和视频格式。
  • loadedmetadata: 获取到视频元数据(例如时长、尺寸、轨道信息)后触发。
  • loadeddata: 第一帧数据加载完成,可以开始播放,但未必能流畅播放。
  • progress: 正在加载数据时周期性地触发。可以通过该事件跟踪加载进度。
  • canplay: 可以播放视频,但可能需要缓冲才能流畅播放。
  • canplaythrough: 可以流畅播放视频,无需缓冲。
  • loadeddata: 视频数据已加载。

2. 播放阶段:

  • playing: 视频开始播放或从暂停状态恢复播放时触发。 注意,play 事件先于 playing 触发。
  • play: 调用 play() 方法后触发,表示开始播放视频的指令已发出,但此时视频可能还未真正开始播放。
  • waiting: 视频由于需要缓冲下一帧而暂停播放时触发。
  • timeupdate: 当前播放时间改变时周期性地触发。
  • pause: 视频暂停时触发。
  • ended: 视频播放结束时触发。

3. 其他事件:

  • seeking: 开始跳转到新的播放位置时触发。
  • seeked: 跳转到新的播放位置完成时触发。
  • ratechange: 播放速率改变时触发。
  • volumechange: 音量改变时触发。
  • error: 发生错误时触发。

容易混淆的事件:

  • play vs. playing: play 是调用 play() 方法后立即触发,表示播放指令已发出;playing 是视频实际开始播放后触发。
  • canplay vs. canplaythrough: canplay 表示可以播放,但可能需要缓冲;canplaythrough 表示可以流畅播放,无需缓冲。
  • loadeddata vs. canplay: loadeddata 表示已加载足够的数据可以开始播放,canplay 表示可以播放,但未必流畅。canplay 通常在 loadeddata 之后触发。

示例代码 (监听关键事件):

const video = document.getElementById('myVideo');

video.addEventListener('loadstart', () => console.log('loadstart'));
video.addEventListener('loadedmetadata', () => console.log('loadedmetadata'));
video.addEventListener('loadeddata', () => console.log('loadeddata'));
video.addEventListener('canplay', () => console.log('canplay'));
video.addEventListener('canplaythrough', () => console.log('canplaythrough'));
video.addEventListener('play', () => console.log('play'));
video.addEventListener('playing', () => console.log('playing'));
video.addEventListener('pause', () => console.log('pause'));
video.addEventListener('ended', () => console.log('ended'));
video.addEventListener('waiting', () => console.log('waiting'));
video.addEventListener('timeupdate', () => console.log('timeupdate'));
video.addEventListener('seeking', () => console.log('seeking'));
video.addEventListener('seeked', () => console.log('seeked'));

实际的触发顺序可能会因为网络状况、视频格式、浏览器等因素而有所不同。 通过监听这些事件,可以更好地控制视频播放过程,并提供更友好的用户体验。 建议根据实际需求选择需要监听的事件。

posted @ 2024-12-11 06:16  王铁柱6  阅读(403)  评论(0)    收藏  举报