JS指定音频audio在某个时间点进行播放


Posted in Javascript onNovember 28, 2020

前言:

今天接到一个需求,需要获取某个.mp3音频文件的时间长度和指定音频audio在某个时间点进行播放(比如说这个视频有4分钟,我要让它默认从第2秒的时候开始播放),这里当然想到了H5中的audio元素,当然我们平时看这个标签上显示的音频时间格式是时:分:秒的格式的因此需要涉及到秒和时间格式的转化。因为刚开始对这块十分的陌生,最后通过查阅了网上的一些资料,最终完美的把这些功能点做好了。在这里分享一下,希望能够帮助有需要的小伙伴。

获取音频时长:

function getAudioDuration(src) {
      let audio = document.createElement('audio') //生成一个audio元素 
      audio.src = src //音乐的路径 
      audio.addEventListener("canplay", function () {
        console.log("音频长度=>>>:", parseInt(audio.duration) + '秒', '音频时分秒格式:', timeToMinute(parseInt(audio
          .duration)));
      });
    }

指定音频audio在某个时间点进行播放:

指定默认从第20s开始播放效果图:

JS指定音频audio在某个时间点进行播放

// 音频加载完成后的一系列操作
    function duration() {
      var myVid = document.getElementById("videoDiv");
      console.log("duration ", myVid);
      if (myVid != null) {
        var duration;
        myVid.load(); //方法重新加载音频/视频元素
        // https://www.w3school.com.cn/tags/av_prop_currenttime.asp
        // currentTime 属性设置或返回音频/视频播放的当前位置(以秒计)。
        // 当设置该属性时,播放会跳跃到指定的位置。
        myVid.currentTime = 20; //默认指定音频默认从20s的时候开始播放(默认时间为s)
        myVid.oncanplay = function () {
          //duration 属性返回当前音频的长度,以秒计。
          console.log("音频时间", myVid.duration);
          console.log("时分秒格式转化:", timeToMinute(myVid.duration))
        }
      }
    }

秒转换时分钟00:00:00时分秒格式:

function timeToMinute(times) {
      var t;
      if (times > -1) {
        var hour = Math.floor(times / 3600);
        var min = Math.floor(times / 60) % 60;
        var sec = times % 60;
        if (hour < 10) {
          t = '0' + hour + ":";
        } else {
          t = hour + ":";
        }

        if (min < 10) {
          t += "0";
        }
        t += min + ":";
        if (sec < 10) {
          t += "0";
        }
        t += sec.toFixed(2);
      }
      t = t.substring(0, t.length - 3);
      return t;
    }

00:00:00时分秒格式转化为秒:

function timeEvent(e) {
      let time = e;
      var len = time.split(':');
      if (len.length == 3) {
        var hour = time.split(':')[0];
        var min = time.split(':')[1];
        var sec = time.split(':')[2];
        return Number(hour * 3600) + Number(min * 60) + Number(sec);
      }
      if (len.length == 2) {
        var min = time.split(':')[0];
        var sec = time.split(':')[1];
        return Number(min * 60) + Number(sec);
      }
      if (len.length == 1) {
        var sec = time.split(':')[0];
        return Number(sec);
      }
    }

完整代码:

<!DOCTYPE html>
<html>

<head>

</head>

<body>
  <audio controls autoplay start="01:00" id='videoDiv'>
    <source src="http://mp3.9ku.com/hot/2005/05-19/65937.mp3" type="audio/ogg">
  </audio>

  <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
  <script type="text/javascript">
    $(function () {
      //js获取某个mp3音频文件的播放时长
      getAudioDuration('http://mp3.9ku.com/hot/2005/05-19/65937.mp3');

      duration();
      console.log("转化为多少秒=》》", timeEvent("00:14:36"));
    })

    // 音频加载完成后的一系列操作
    function duration() {
      var myVid = document.getElementById("videoDiv");
      console.log("duration ", myVid);
      if (myVid != null) {
        var duration;
        myVid.load(); //方法重新加载音频/视频元素
        // https://www.w3school.com.cn/tags/av_prop_currenttime.asp
        // currentTime 属性设置或返回音频/视频播放的当前位置(以秒计)。
        // 当设置该属性时,播放会跳跃到指定的位置。
        myVid.currentTime = 20; //默认指定音频默认从20s的时候开始播放(默认时间为s)
        myVid.oncanplay = function () {
          //duration 属性返回当前音频的长度,以秒计。
          console.log("音频时间", myVid.duration);
          console.log("时分秒格式转化:", timeToMinute(myVid.duration))
        }
      }
    }

    function getAudioDuration(src) {
      let audio = document.createElement('audio') //生成一个audio元素 
      audio.src = src //音乐的路径 
      audio.addEventListener("canplay", function () {
        console.log("音频长度=>>>:", parseInt(audio.duration) + '秒', '音频时分秒格式:', timeToMinute(parseInt(audio
          .duration)));
      });
    }

    // 秒转换时分钟00:00:00格式
    function timeToMinute(times) {
      var t;
      if (times > -1) {
        var hour = Math.floor(times / 3600);
        var min = Math.floor(times / 60) % 60;
        var sec = times % 60;
        if (hour < 10) {
          t = '0' + hour + ":";
        } else {
          t = hour + ":";
        }

        if (min < 10) {
          t += "0";
        }
        t += min + ":";
        if (sec < 10) {
          t += "0";
        }
        t += sec.toFixed(2);
      }
      t = t.substring(0, t.length - 3);
      return t;
    }

    // 00:00:00时分秒格式转化为秒
    function timeEvent(e) {
      let time = e;
      var len = time.split(':');
      if (len.length == 3) {
        var hour = time.split(':')[0];
        var min = time.split(':')[1];
        var sec = time.split(':')[2];
        return Number(hour * 3600) + Number(min * 60) + Number(sec);
      }
      if (len.length == 2) {
        var min = time.split(':')[0];
        var sec = time.split(':')[1];
        return Number(min * 60) + Number(sec);
      }
      if (len.length == 1) {
        var sec = time.split(':')[0];
        return Number(sec);
      }
    }
  </script>
</body>

</html>

参考文章:

https://www.zhangxinxu.com/wordpress/2019/07/html-audio-api-guide/

https://developer.mozilla.org/zh-CN/docs/Web/Guide/HTML/Using_HTML5_audio_and_video

https://blog.csdn.net/qq_31984879/article/details/84071245

https://www.w3school.com.cn/tags/av_prop_currenttime.asp

到此这篇关于JS指定音频audio在某个时间点进行播放的文章就介绍到这了,更多相关JS音频audio长度内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript 获取事件对象的注意点
Jul 29 Javascript
JS实现点击链接取消跳转效果的方法
Jan 24 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
Apr 20 Javascript
浅谈js的解析顺序 作用域 严格模式
Oct 23 Javascript
vue中的watch监听数据变化及watch中各属性的详解
Sep 11 Javascript
使用Vuex解决Vue中的身份验证问题
Sep 28 Javascript
写一个Vue Popup组件
Feb 25 Javascript
javascript之分片上传,断点续传的实际项目实现详解
Sep 05 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
Oct 16 Javascript
微信小程序实现同时上传多张图片
Feb 03 Javascript
JS实现时间校验的代码
May 25 Javascript
html5中sharedWorker实现多页面通信的示例代码
May 07 Javascript
Vue用mixin合并重复代码的实现
Nov 27 #Vue.js
js实现扫雷源代码
Nov 27 #Javascript
JavaScript字符串转数字的简单实现方法
Nov 27 #Javascript
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 #Vue.js
JavaScript中的Proxy对象
Nov 27 #Javascript
详解JavaScript中的链式调用
Nov 27 #Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 #Vue.js
You might like
239军机修复记
2021/03/02 无线电
PHP 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
2015/07/08 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
JavaScript函数、方法、对象代码
2008/10/29 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
微信小程序开发一键登录 获取session_key和openid实例
2016/11/23 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
jQuery 禁止表单用户名、密码自动填充功能
2017/10/30 jQuery
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
vue+echarts实现动态绘制图表及异步加载数据的方法
2018/10/17 Javascript
前端Vue项目详解--初始化及导航栏
2019/06/24 Javascript
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
2020/02/06 NodeJs
python 简易计算器程序,代码就几行
2009/08/29 Python
python字符串连接的N种方式总结
2014/09/17 Python
python语音识别实践之百度语音API
2018/08/30 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
Python实现统计英文文章词频的方法分析
2019/01/28 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
Stuart Weitzman美国官网:美国奢华鞋履品牌
2016/08/18 全球购物
Under Armour安德玛意大利官网:美国高端运动科技品牌
2020/01/16 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
往来会计岗位职责
2013/12/19 职场文书
销售工作岗位职责
2013/12/24 职场文书
《小猫刮胡子》教学反思
2014/02/21 职场文书
招标承诺书
2014/08/30 职场文书
交通违章检讨书
2014/09/21 职场文书
思想作风建设心得体会
2014/10/22 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
导游词之太湖
2019/10/08 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers