当前位置: 首页 > java >正文

vedio.ontimeupdate()和video.onloadeddata()

video.onloadeddata ()

video.onloadeddata 是 JavaScript 中用于监听 HTML <video> 元素 「当前帧数据已加载」 的事件处理器。当视频的第一帧画面数据加载完成(足以开始播放)时,会触发此事件。


1. 基本用法

const video = document.querySelector('video');video.onloadeddata = function() {console.log('视频第一帧已加载,可以播放了!');
};
  • 触发时机

    • 视频元数据(如分辨率、时长)和第一帧画面加载完成。

    • 早于 oncanplay(可流畅播放的事件)。

  • 用途:在视频初始渲染时执行操作(如显示封面、初始化播放器)。


2. 替代方案:addEventListener

推荐使用 addEventListener,避免覆盖已有事件:

video.addEventListener('loadeddata', function() {console.log('视频数据已加载');
});

3. 常见应用场景

① 显示视频封面(第一帧)
video.addEventListener('loadeddata', function() {const canvas = document.createElement('canvas');canvas.width = video.videoWidth;canvas.height = video.videoHeight;canvas.getContext('2d').drawImage(video, 0, 0);document.querySelector('.video-cover').appendChild(canvas);
});
② 初始化播放器状态
video.addEventListener('loadeddata', function() {// 显示自定义播放按钮document.querySelector('.play-button').style.display = 'block';
});
③ 检测视频基础信息
video.addEventListener('loadeddata', function() {console.log('视频分辨率:', video.videoWidth, 'x', video.videoHeight);console.log('视频时长:', video.duration);
});

4. 与其他视频事件的区别

事件触发条件
onloadedmetadata仅元数据(如时长、分辨率)加载完成,但画面未加载。
onloadeddata第一帧画面加载完成,可显示画面但可能无法流畅播放。
oncanplay已加载足够数据可开始播放(但不保证不卡顿)。
oncanplaythrough已加载足够数据可流畅播放至结束(理想状态)。

5. 注意事项

  • 网络环境影响:如果视频文件较大或网络慢,loadeddata 可能延迟触发。

  • preload属性相关:若 <video preload="none">,需用户交互后才会加载数据。

  • 移动端兼容性:部分移动浏览器可能延迟加载数据以节省流量。


总结

video.onloadeddata 是视频处理的基础事件之一,适合在视频画面首次可用时执行初始化操作。若需更高兼容性,建议结合 loadedmetadata 和 canplay 事件使用。

video.ontimeupdate()

video.ontimeupdate() 是 JavaScript 中用于监听 HTML <video> 元素播放时间更新的事件处理器。当视频播放时,只要当前播放位置(currentTime)发生变化,就会触发该事件。


1. 基本用法

const video = document.querySelector('video');video.ontimeupdate = function() {console.log('当前播放时间:', video.currentTime);
};
  • 触发时机:视频播放、用户拖动进度条、跳转时间点等。

  • 用途:实时监测播放进度,用于更新进度条、显示字幕、记录观看行为等。


2. 替代方案:addEventListener

更推荐使用 addEventListener,避免覆盖已有事件:

video.addEventListener('timeupdate', function() {console.log('时间更新:', video.currentTime);
});

3. 常见应用场景

① 自定义进度条同步
video.addEventListener('timeupdate', function() {const progress = (video.currentTime / video.duration) * 100;document.querySelector('.progress-bar').style.width = `${progress}%`;
});
② 字幕/弹幕显示
const subtitles = [{ time: 5, text: "第一句字幕" },{ time: 10, text: "第二句字幕" }
];video.addEventListener('timeupdate', function() {subtitles.forEach(item => {if (video.currentTime >= item.time && video.currentTime < item.time + 2) {document.querySelector('.subtitle').textContent = item.text;}});
});
③ 记录观看进度
video.addEventListener('timeupdate', function() {localStorage.setItem('videoProgress', video.currentTime);
});// 下次打开页面时恢复进度
video.currentTime = parseFloat(localStorage.getItem('videoProgress')) || 0;

4. 注意事项

  • 性能优化timeupdate 触发频率较高(约每秒4-60次),避免在回调中执行复杂计算。

  • seeked事件区别seeked 仅在用户手动跳转后触发,而timeupdate在播放过程中持续触发。


总结

video.ontimeupdate 是控制视频交互的核心事件之一,适用于进度跟踪、动态内容加载等场景。推荐使用 addEventListener('timeupdate') 以保持代码灵活性。

http://www.xdnf.cn/news/10289.html

相关文章:

  • C++二叉树常见OJ题分析
  • 2025-05-31 Python深度学习10——模型训练流程
  • 一些常用的命令
  • 1.JS逆向简介
  • JSR 303(即 Bean Validation)是一个通过​​注解在 Java Bean 上定义和执行验证规则​​的规范
  • 704SJBH蓝天影院订票网站的设计
  • 极智项目 | 多模态大模型推理平台-Streamlit版(支持Qwen2.5/InternVL3/KimiVL三大模型)
  • b. 组合数
  • 第3节 Node.js 创建第一个应用
  • 六.MySQL增删查改
  • JWT 入门
  • 利用nginx完成iframe请求的身份认证
  • 【NLP 78、手搓Transformer模型结构】
  • Namespace 命名空间的使用
  • (7)-Fiddler抓包-Fiddler状态面板-QuickExec命令行
  • 项目日记 -Qt音乐播放器 -搜索模块
  • 如何手搓扫雷(待扩展)
  • pytest中的元类思想与实战应用
  • C++基础算法————贪心
  • Kafka 如何保证不重复消费
  • Linux搭建DNS服务器
  • BLE协议全景图:从0开始理解低功耗蓝牙
  • 堆与堆排序及 Top-K 问题解析:从原理到实践
  • 玩客云WS1608控制LED灯的颜色
  • 光电设计大赛智能车激光对抗方案分享:低成本高效备赛攻略
  • C 语言栈实现详解:从原理到动态扩容与工程化应用(含顺序/链式对比、函数调用栈、表达式求值等)
  • python连接邮箱的协议选择
  • C语言结构体的别名与创建结构体变量
  • jetpack compose 界面刷新的几种方式 如何避免无效的界面刷新
  • Remote Sensing投稿记录(投稿邮箱写错、申请大修延期...)风雨波折投稿路