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权威指南 学习笔记之变量作用域分享
Sep 28 Javascript
单击复制文字兼容各浏览器的完美解决方案
Jul 04 Javascript
用js正确判断用户名cookie是否存在的方法
Jan 28 Javascript
jquery组件使用中遇到的问题整理及解决
Feb 21 Javascript
jQuery实现拖拽效果插件的方法
Mar 23 Javascript
javascript判断复选框是否选中的方法
Oct 16 Javascript
angularjs封装bootstrap时间插件datetimepicker
Jun 20 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
Feb 21 Javascript
Vue filters过滤器的使用方法
Jul 14 Javascript
vue中导出Excel表格的实现代码
Oct 18 Javascript
js实现盒子移动动画效果
Aug 09 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
PHP MySql增删改查的简单实例
2016/06/21 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
PHP+iframe模拟Ajax上传文件功能示例
2019/07/02 PHP
Jquery跨域获得Json时invalid label错误的解决办法
2011/01/11 Javascript
使用JS实现jQuery的addClass, removeClass, hasClass函数功能
2014/10/31 Javascript
JavaScript获取页面中超链接数量的方法
2015/11/09 Javascript
一分钟理解js闭包
2016/05/04 Javascript
jquery层级选择器的实现(匹配后代元素div)
2016/09/05 Javascript
vue如何使用 Slot 分发内容实例详解
2017/09/05 Javascript
es6系列教程_ Map详解以及常用api介绍
2017/09/25 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
父组件中vuex方法更新state子组件不能及时更新并渲染的完美解决方法
2018/04/25 Javascript
Vue请求JSON Server服务器数据的实现方法
2018/11/02 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
详解js实时获取并显示当前时间的方法
2019/05/10 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
JS document form表单元素操作完整示例
2020/01/13 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
python常见数制转换实例分析
2015/05/09 Python
python编程实现随机生成多个椭圆实例代码
2018/01/03 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
CSS书写规范、顺序和命名规则
2014/03/06 HTML / CSS
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
万年牢教学反思
2014/02/15 职场文书
广告创意求职信
2014/03/17 职场文书
文秘个人求职信范文
2014/04/22 职场文书
春节超市活动方案
2014/08/14 职场文书
Nginx使用X-Accel-Redirect实现静态文件下载的统计、鉴权、防盗链、限速等
2021/04/04 Servers
Vue实现动态查询规则生成组件
2021/05/27 Vue.js
详解Laravel框架的依赖注入功能
2021/05/27 PHP