如何用JavaScript获取HTML视频的总时长

来源:IPIPP.com作者:头衔:全栈工程师
导读:本期聚焦于小伙伴创作的《如何用JavaScript获取HTML视频的总时长》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用JavaScript获取HTML视频的总时长》有用,将其分享出去将是对创作者最好的鼓励。

在网页开发中,我们经常会遇到需要展示视频总时长、制作自定义视频播放器进度条等需求,这时候就需要获取HTML视频元素的总时长。很多人第一时间会想到使用video元素的duration属性,但实际操作过程中很容易出现获取不到正确值的问题,下面我们就来详细讲解正确的获取方式。

如何用JavaScript获取HTML视频的总时长

基础获取方式

HTML的<video>元素自带duration属性,该属性表示视频的总时长,单位是秒。如果视频元数据已经加载完成,直接读取该属性就能得到正确的时长值。我们可以先创建一个简单的视频元素:

<video id="myVideo" controls src="test.mp4"></video>
<div id="durationShow">视频时长:</div>

如果直接在页面加载完成后读取duration,很可能会得到NaN的结果,这是因为视频的元数据还没有加载完成,浏览器还不知道视频的总时长。这时候就需要监听视频的loadedmetadata事件,该事件会在视频的元数据加载完成后触发。

正确的实现代码

下面的代码演示了如何监听事件正确获取视频总时长:

// 获取video元素
const videoElement = document.getElementById('myVideo');
// 获取展示时长的元素
const durationShow = document.getElementById('durationShow');

// 监听元数据加载完成事件
videoElement.addEventListener('loadedmetadata', function() {
    // 获取视频总时长,单位是秒
    const totalDuration = videoElement.duration;
    // 转换为分:秒的格式
    const minutes = Math.floor(totalDuration / 60);
    const seconds = Math.floor(totalDuration % 60);
    // 补零处理,保证格式统一
    const formatSeconds = seconds < 10 ? '0' + seconds : seconds;
    // 展示时长
    durationShow.innerHTML = '视频时长:' + minutes + ':' + formatSeconds;
});

// 容错处理,如果元数据已经加载完成(比如视频缓存过),直接读取
if (videoElement.readyState >= 1) {
    const totalDuration = videoElement.duration;
    const minutes = Math.floor(totalDuration / 60);
    const seconds = Math.floor(totalDuration % 60);
    const formatSeconds = seconds < 10 ? '0' + seconds : seconds;
    durationShow.innerHTML = '视频时长:' + minutes + ':' + formatSeconds;
}

常见问题说明

为什么获取到的duration是NaN

出现这种情况基本都是因为读取duration的时机太早,视频的元数据还没有加载完成。video元素的readyState属性可以表示视频的当前状态,当readyState大于等于1的时候,元数据才加载完成,这时候读取duration才会得到正确的值。

跨域视频的时长获取问题

如果视频资源是跨域的,需要确保视频服务器配置了正确的CORS头,否则可能无法正确加载元数据,导致duration获取失败。如果遇到跨域问题,可以先联系视频服务方配置CORS,或者在自己的服务端做视频资源的代理转发。

其他注意事项

  • duration属性的值是浮点数,比如一个1分30秒的视频,duration的值可能是90.452,所以转换为分秒格式的时候需要做取整处理。
  • 如果视频加载失败,loadedmetadata事件不会触发,可以添加error事件监听来处理加载失败的情况。
  • 不同浏览器对duration的精度处理可能略有差异,但基本都是秒为单位的数值,转换逻辑通用。

通过以上方法,就可以稳定地获取到HTML视频的总时长,满足各种业务场景的需求。如果需要在视频时长变化的时候重新获取,可以再次监听loadedmetadata事件,或者监听durationchange事件,该事件会在视频时长发生变化时触发。

HTML_videoduration属性JavaScript视频时长获取修改时间:2026-05-25 10:47:38

免责声明:已尽一切努力确保本网站所含信息的准确性。网站部分内容来源于网络或由用户自行发表,内容观点不代表本站立场。本站是个人网站免费分享,内容仅供个人学习、研究或参考使用,如内容中引用了第三方作品,其版权归原作者所有。若内容触犯了您的权益,请联系我们进行处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。前端、网络、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握网站开发与运维所需的核心技术栈。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端逻辑,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。