Skip to content
山不让尘,川不辞盈
搜索 K
Main Navigation 主页闲聊关于
实用网站
工具网站
Excel工具

Appearance

Sidebar Navigation

pages

闲聊

关于我

tools

ExcelTools

recommendation

工具网页

实用网页

2025

五一长沙游玩攻略

2024

Coze Agent 调研

Git 多仓库提交用户信息动态设置

vitepress博客搭建

Vue3 + vite 实用依赖与配置

解决nvm use无效问题

2023

Flutter windows 环境配置

Electron windows robotjs 安装教程

Electron 控制屏幕亮度

现阶段AI建站工具简析

2022

Echarts-dataZoom在windows无法触屏拖动问题

Vue全局错误监测

Electron前端开启局域网接口

快速搭建Electron桌面应用

Node.js 笔记

el-table懒加载局部更新

uniapp 小程序自定义顶部标题

JS 代码编写优化

十个常用工具库

前端常用的响应式布局方法

Vue 面试知识点

JavaScript 手写方法

JS音频的总时长 NaN || Infinity 问题

B站前端路线资源整合

Vue 组件间通信的6种方式

TypeScript 基础知识点笔记

2021

JavaScript 面试知识点

LeeCode 笔记

axios简单封装

Vue3 笔记

Vue2 笔记

JavaScript 笔记

Git 常用命令

JavaScript DOM 常用知识点

vscode 插件推荐

ES6模块化

请求与跨域

CSS 图片处理技巧

文章目录

JS音频的总时长 NaN || Infinity 问题 ​

阅读时间:

2

分钟
文章字数:

467

字
发布日期:

2022-02-09

最近更新:

2025-04-27

JavaScript

1. 需求分析 ​

后端的接口中包含音频链接,前端需要自定义一个播放器播放音频。

2. 发现问题 ​

2.1 使用浏览器内置播放器<audio>无法显示时长 ​

Chrome && Edge:播放到一定时间后才能移动进度条与显示时长

Chrome默认状态播放时播放快结束时
111

Firefox:直接可以看到进度条与时长,样子也好看,问题解决(bushi)

Firefox默认状态播放时播放快结束时
111

2.2 获取总时长为 NaN || Infinity ​

js
audio.ontimeupdate = () => {
  console.log(`currentTime: ${audio.currentTime} , duration: ${audio.duration}`)
}

根据输出可以看到只有在快接近播放完毕时才能获取到时间。

由此可以想到一个办法,预加载!直接先播放一遍获取时长!

1

3. 疑惑点 ​

问:使用预加载方案,如果单纯的将音频播放一遍在获取总时长不太妙,时间太久了捏。

答:结合生活实际,想想你看片时想快速结束时会怎么做?

问:噢,快进!

4. 解决方案 ​

示例代码,可根据自己的需要更改方案,主要看countAudioTime函数即可。

这种方案能很快的获取出音频的时间,然后就可以愉快的自定义播放器啦~ 有问题欢迎指出~

js
const audio = new Audio()
audio.src = 'https://www.千度.com/audio/JiNiTaiMei.mp3'

// 计算音频的时长
const countAudioTime = async () => {
  while (isNaN(audio.duration) || audio.duration === Infinity) {
    // 延迟一会 不然网页都卡死
    await new Promise((resolve) => setTimeout(resolve, 200))
    // 设置随机播放时间,模拟调进度条
    audio.currentTime = 10000000 * Math.random()
  }
  console.log('音频的总时长:', audio.duration)
}
countAudioTime()
Pager
上一篇JavaScript 手写方法
下一篇B站前端路线资源整合
本站总访问量 -- 次 本站访客数 -- 人次

前端狗都不如 © 2021-2025 holden