You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Video.js中捕获ChaptersButton的选中事件?

解决Video.js章节提示点选中事件捕获问题

你之前的思路错在直接给ChaptersButton或其菜单绑定事件,章节菜单的每个选项是独立的MenuItem,它们的交互会被Video.js内部处理,不会直接触发按钮/菜单的click或select事件。正确的做法是监听播放器或文本轨道的内置事件:

方法一:监听播放器的chapterchange事件

Video.js 原生提供了chapterchange事件,当用户点击章节菜单切换章节(或播放自动切换章节)时触发,直接在播放器实例上监听即可获取选中章节的信息:

player.on('chapterchange', function() {
  const currentChapter = player.chapters().currentChapter();
  if (currentChapter) {
    // 获取选中章节的起始时间
    const selectedTime = currentChapter.startTime;
    // 获取章节标题
    const chapterTitle = currentChapter.label;
    
    console.log('选中章节的时间:', selectedTime);
    // 在这里添加你要展示其他内容的逻辑
  }
});

方法二:监听章节文本轨道的cuechange事件

章节是基于WebVTT文本轨道实现的,你可以直接获取对应的文本轨道,监听其cuechange事件来捕获选中的提示点:

// 获取章节对应的文本轨道(需确保你的WebVTT轨道id为'chapters',可根据实际调整)
const chaptersTrack = player.textTracks().getTrackById('chapters');

if (chaptersTrack) {
  chaptersTrack.addEventListener('cuechange', function() {
    const activeCues = this.activeCues;
    if (activeCues.length > 0) {
      const selectedCue = activeCues[0];
      // 获取选中提示点的起始时间
      const cueStartTime = selectedCue.startTime;
      
      console.log('选中提示点的时间:', cueStartTime);
      // 处理后续展示逻辑
    }
  });
}

注意:如果你的WebVTT轨道没有设置id,可以通过遍历player.textTracks()的方式找到类型为'chapters'的轨道:

let chaptersTrack;
const tracks = player.textTracks();
for (let i = 0; i < tracks.length; i++) {
  if (tracks[i].kind === 'chapters') {
    chaptersTrack = tracks[i];
    break;
  }
}

内容的提问来源于stack exchange,提问作者spring

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 11:13:24