html5audio标签播放进度怎么获取_currentTime属性用法说明【教程】
发布时间 - 2025-12-30 00:00:00 点击率:次audio.currentTime 返回秒数而非百分比,需用 (currentTime / duration) * 100 换算;须在 loadedmetadata 后获取 duration,监听 timeupdate 事件实时更新进度,设置 currentTime 可能触发 waiting,移动端兼容性差需特别处理。
audio.currentTime 返回的是秒数,不是百分比
获取播放进度最直接的方式是读取 currentTime 属性,但它返回的是当前已播放的**秒数(number 类型)**,不是 0–100 的百分比。你需要手动换算:
const audio = document.querySelector('audio');
const percent = (audio.currentTime / audio.duration) * 100;注意:只有在 loadedmetadata 事件触发后,duration
才可靠;否则可能为 NaN 或 Infinity。
监听 timeupdate 事件才能实时获取进度
currentTime 是只读属性,不能靠轮询定时器去查——既低效又不准。正确做法是监听 timeupdate 事件:
audio.addEventListener('timeupdate', () => {
console.log('当前时间:', audio.currentTime);
});该事件在播放过程中自动高频触发(通常每 200–250ms 一次),但**不会在静音、暂停或加载中触发**。如果需要更精细控制(比如拖动进度条时同步显示),要额外监听 seeking 和 seeked。
设置 currentTime 可能触发加载和等待
给 currentTime 赋值会触发跳转,但行为取决于资源加载状态:
- 若目标位置已缓冲,跳转几乎立即生效
- 若未缓冲,浏览器会触发
waiting事件,然后等数据加载完成才继续播放 - 某些移动端浏览器(如 iOS Safari)在未用户手势触发的上下文中禁止自动 seek,会静默失败
canplay 或 canplaythrough 使用,并捕获 error 事件:audio.currentTime = 30;
audio.onseeked = () => console.log('跳转完成');
audio.onerror = () => console.error('跳转失败,可能未就绪或跨域限制');移动端兼容性差的几个典型表现
在 iOS 和部分安卓 WebView 中,currentTime 的读写受限明显:
- iOS Safari 下,未播放过的
audio元素,duration常为NaN,需先调用load()或触发一次play()(哪怕立刻pause()) -
微信内置浏览器对
timeupdate频率做降频处理,有时几秒才触发一次 - 部分安卓机在后台标签页中,
timeupdate会停止触发,即使音频仍在播放
currentTime 做高精度同步(比如歌词滚动),应优先用服务端时间戳 + 播放起始偏移来校准。
# html
# html5
# 微信
# 浏览器
# 安卓
# safari
# ai
# ios
# 跨域
# Error
# number
# 事件
# webview
# 跳转
# 的是
# 加载
# 几个
# 会在
# 又不
# 拖动
# 而非
# 能为
# 则可
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在香港服务器上快速搭建免备案网站?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何用y主机助手快速搭建网站?
如何基于云服务器快速搭建个人网站?
Laravel如何与Inertia.js和Vue/React构建现代单页应用
Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权
如何快速打造个性化非模板自助建站?
公司门户网站制作流程,华为官网怎么做?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
什么是JavaScript解构赋值_解构赋值有哪些实用技巧
Laravel Blade组件怎么用_Laravel可复用视图组件的创建与使用
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
Laravel如何使用.env文件管理环境变量?(最佳实践)
怎么用AI帮你为初创公司进行市场定位分析?
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
*服务器网站为何频现安全漏洞?
网站页面设计需要考虑到这些问题
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何快速搭建高效简练网站?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何在IIS中配置站点IP、端口及主机头?
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言
Python制作简易注册登录系统
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
javascript中的try catch异常捕获机制用法分析
详解jQuery中基本的动画方法
Android滚轮选择时间控件使用详解
在centOS 7安装mysql 5.7的详细教程
网易LOFTER官网链接 老福特网页版登录地址
在线制作视频网站免费,都有哪些好的动漫网站?
详解MySQL数据库的安装与密码配置
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
七夕网站制作视频,七夕大促活动怎么报名?
如何自定义建站之星模板颜色并下载新样式?
JavaScript如何实现错误处理_try...catch如何捕获异常?
如何在腾讯云服务器快速搭建个人网站?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
🚀拖拽式CMS建站能否实现高效与个性化并存?
HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
如何在阿里云高效完成企业建站全流程?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程


