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 相关文章推荐
Prototype 工具函数 学习
Jul 23 Javascript
javascript学习笔记(七)利用javascript来创建和存储cookie
Apr 08 Javascript
javascript执行环境及作用域详解
May 05 Javascript
JCrop+ajaxUpload 图像切割上传的实例代码
Jul 20 Javascript
浅析$(function) ready和onload 的区别
Sep 03 Javascript
JavaScript 中对象的深拷贝
Dec 04 Javascript
Bootstrap基本样式学习笔记之图片(6)
Dec 07 Javascript
基于input动态模糊查询的实现方法
Dec 12 Javascript
使用jQuery动态设置单选框的选中效果
Dec 06 jQuery
JS原生瀑布流效果实现
Apr 26 Javascript
基于js实现判断浏览器类型代码实例
Jul 17 Javascript
Javascript实现打鼓效果
Jan 29 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
深入解析PHP中的(伪)多线程与多进程
2013/07/01 PHP
PHP生成可点击刷新的验证码简单示例
2016/05/13 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
html页面显示年月日时分秒和星期几的两种方式
2013/08/20 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
jQuery on方法传递参数示例
2014/12/09 Javascript
详解js中class的多种函数封装方法
2016/01/03 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
JS新包管理工具yarn和npm的对比与使用入门
2016/12/09 Javascript
自学实现angularjs依赖注入
2016/12/20 Javascript
AngularJS中的缓存使用
2017/01/11 Javascript
详解vue静态资源打包中的坑与解决方案
2018/02/05 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
Vue v-bind动态绑定class实例方法
2020/01/15 Javascript
[03:18]【TI9纪实】社区大触GL与木木
2019/08/25 DOTA
Python的Django框架中的数据过滤功能
2015/07/17 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
2017/08/25 Python
python中Matplotlib实现绘制3D图的示例代码
2017/09/04 Python
Python numpy 提取矩阵的某一行或某一列的实例
2018/04/03 Python
Python根据文件名批量转移图片的方法
2018/10/21 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
解决Python图形界面中设置尺寸的问题
2020/03/05 Python
英语自荐信范文
2013/12/11 职场文书
证婚人经典证婚词
2014/01/09 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
靠谱准确的求职信
2019/04/02 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
Pandas数据结构之Series的使用
2022/03/31 Python