Video.js 如何监听视频播放结束事件? Top丶明月 提问于 2026-03-24 21:38:20 阅读 57 交互 我用 Video.js 做了个播放器,想在视频播完后自动跳转页面,但试了几次都没触发结束事件。官方文档说用 ended 事件,但我这么写好像没生效: const player = videojs('my-video'); player.on('ended', () => { console.log('视频结束了!'); window.location.href = '/next-page'; }); 控制台完全没输出,是不是我绑定时机不对?还是得用别的事件名? Video.js 我来解答 赞 6 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 2 条解答 IT人子尧 Lv1 看起来你的代码基本是对的,但有几个地方可能需要注意。让我一步步跟你解释下怎么正确监听 Video.js 的播放结束事件。 首先检查你初始化 player 的时机是不是对的。很多时候问题就出在这里,DOM 还没完全加载好你就开始操作了。我建议你把初始化代码放在一个 window.onload 里头,确保 DOM 完全加载完再执行。原理是这样:等页面所有元素都准备好了,再去创建 player 实例。 再来就是事件绑定本身,我觉得你可以试试这个写法: window.onload = function() { // 确保视频元素已经存在 const player = videojs('my-video'); // 绑定 ended 事件,这里用箭头函数更简洁 player.on('ended', () => { console.log('视频结束了!'); // 先看看控制台输出是否正常 window.location.href = '/next-page'; // 页面跳转 }); // 记得初始化播放器 player.ready(function() { console.log('Player is ready'); }); }; 顺便说一句,如果还是有问题,可以在这行 console.log('视频结束了!'); 前加个调试语句,比如 console.log(player); 看看 player 对象有没有正确创建。 最后一个小细节,别忘了在 HTML 里给你的视频元素加上 id="my-video",这很重要啊,好多新手都会漏掉这个。要是这些都没问题,那应该就能正常工作了。 说实话我自己也踩过不少这种坑,慢慢来就好,搞清楚每一步的执行顺序最重要。 回复 点赞 2026-03-29 13:33 打工人子香 Lv1 前端这块有时候就是坑多。你这代码看起来没啥问题,不过有几个地方可以检查一下。首先确保你的 Video.js 库加载正确了,有时候是因为库加载顺序或者路径不对导致的。 其次,确认一下你的视频元素和 ID 设置正确,确保 my-video 是正确的 video 标签 ID。 最后,你可以尝试在视频初始化后再绑定事件,确保视频实例已经准备好。你可以这样做: var player = videojs('my-video'); player.ready(function() { this.on('ended', function() { console.log('视频结束了!'); window.location.href = '/next-page'; }); }); 这样就把事件绑定放在了视频实例 ready 之后,应该能正常触发了。还不行的话,可能是其他地方出了问题,比如视频源有问题或者视频被手动暂停等。 回复 点赞 2026-03-24 22:01 加载更多 相关推荐 2 回答 84 浏览 Dash.js在React中监听缓冲事件不触发怎么办? 我用Dash.js在React里做视频播放,想监听缓冲开始事件来显示加载提示。按照文档写了事件绑定,但控制台一直没输出,是哪里漏了吗? import React, { useRef, useEffec... 圣哲 交互 2026-01-27 18:18:31 2 回答 71 浏览 Dash.js播放HLS视频时,视频封面无法居中显示怎么办? 用Dash.js播放HLS视频时,我给视频加了个封面图,但无论怎么调整CSS都无法让封面在不同分辨率下居中显示。我尝试过绝对定位配合transform,但加载视频时封面会突然跳到左上角。 这是我的CS... Dev · 春景 交互 2026-02-14 19:08:25 2 回答 105 浏览 为什么我的Node.js事件监听在第二次触发时不执行? 我在用Node.js的EventEmitter写一个消息队列处理模块,发现第一次触发事件时能正常执行监听函数,但第二次触发就完全没反应了。 代码大概是这样写的: const EventEmitter ... UP主~艳珂 前端 2026-01-29 21:39:38 1 回答 51 浏览 NW.js 中如何正确监听窗口关闭事件? 我在用 NW.js 做一个桌面应用,想在用户点击窗口右上角的关闭按钮时弹出确认对话框,但试了几次都没生效。我用了 win.on('close', ...),但窗口还是直接关了,根本没触发回调。 我的代... A. 园园 框架 2026-03-08 19:46:22 2 回答 107 浏览 Hammer.js双指缩放时为什么会触发点击事件? 在移动端网页里用Hammer.js给图片绑定了双指缩放和点击事件,但每次缩放结束后总会意外触发点击跳转。试过在缩放事件里用event.stopPropagation()也不行... const mc ... 爱书的笔记 交互 2026-02-18 09:54:46 2 回答 53 浏览 QQ浏览器中video标签的播放按钮显示异常怎么办? 在QQ浏览器里用video标签做视频播放时,系统自带的播放按钮总是显示成灰色不可点击状态,但视频能正常自动播放。其他浏览器都正常,这是为什么啊? 代码就很简单这样写的: <video id=&q... a'ゞ静欣 移动 2026-02-16 03:03:32 1 回答 81 浏览 HLS.js动态切换自适应码率后视频卡住怎么办? 在React项目里用HLS.js实现视频播放,想让前端动态切换不同分辨率的自适应码率。我通过hls.levels获取到可用码率列表,然后在点击事件里调用hls.swapAudioCodec或者hls.... 梦幻 Dev 交互 2026-02-03 20:06:39 1 回答 50 浏览 Hotkeys.js 为什么监听 Ctrl+Enter 不生效? 我用 Hotkeys.js 想监听 Ctrl+Enter 组合键提交表单,但怎么按都没反应,其他快捷键比如 'a' 或 'ctrl+s' 都能正常触发。是不是组合键写法有问题? 我试过写成 'ctrl... Zz晨硕 交互 2026-03-22 23:11:18 2 回答 31 浏览 Dash.js播放HLS流时为什么一直卡在loading状态? 我用 Dash.js 尝试播放一个 HLS 流(其实是 .m3u8 链接),但页面一直显示 loading,控制台也没报错。明明这个链接在 VLC 里能正常播放,是不是我初始化方式有问题? 我试过设置... 慕容永穗 交互 2026-03-02 10:03:18 2 回答 58 浏览 HLS.js 播放时为什么总在切换清晰度后卡住? 我用 HLS.js 做了一个支持多码率切换的播放器,但每次手动切换清晰度(比如从 720p 切到 1080p)之后,视频就会卡住几秒甚至直接黑屏。控制台没报错,network 里看到新的 m3u8 和... 慕容炳光 交互 2026-03-01 21:40:23
首先检查你初始化 player 的时机是不是对的。很多时候问题就出在这里,DOM 还没完全加载好你就开始操作了。我建议你把初始化代码放在一个 window.onload 里头,确保 DOM 完全加载完再执行。原理是这样:等页面所有元素都准备好了,再去创建 player 实例。
再来就是事件绑定本身,我觉得你可以试试这个写法:
顺便说一句,如果还是有问题,可以在这行
console.log('视频结束了!');前加个调试语句,比如console.log(player);看看 player 对象有没有正确创建。最后一个小细节,别忘了在 HTML 里给你的视频元素加上 id="my-video",这很重要啊,好多新手都会漏掉这个。要是这些都没问题,那应该就能正常工作了。
说实话我自己也踩过不少这种坑,慢慢来就好,搞清楚每一步的执行顺序最重要。
其次,确认一下你的视频元素和 ID 设置正确,确保
my-video是正确的 video 标签 ID。最后,你可以尝试在视频初始化后再绑定事件,确保视频实例已经准备好。你可以这样做:
这样就把事件绑定放在了视频实例 ready 之后,应该能正常触发了。还不行的话,可能是其他地方出了问题,比如视频源有问题或者视频被手动暂停等。