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 学习笔记(onchange等)
Nov 14 Javascript
jQuery操作元素css样式的三种方法
Jun 04 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
JavaScript中具名函数的多种调用方式总结
Nov 08 Javascript
JavaScript 实现的checkbox经典实例分享
Oct 16 Javascript
javascript基础知识之html5轮播图实例讲解(44)
Feb 17 Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 Javascript
js获取元素的偏移量offset简单方法(必看)
Jul 05 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
Aug 19 Javascript
JavaScript 斐波那契数列 倒序输出 输出100以内的质数代码实例
Sep 11 Javascript
VUE 动态组件的应用案例分析
Dec 02 Javascript
ES5 模拟 ES6 的 Symbol 实现私有成员功能示例
May 06 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.MVC的模板标签系统(三)
2006/09/05 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP写MySQL数据 实现代码
2009/06/15 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
CodeIgniter读写分离实现方法详解
2016/01/20 PHP
JQuery1.4+ Ajax IE8 内存泄漏问题
2010/10/15 Javascript
jQuery平滑旋转幻灯片特效代码分享
2015/09/07 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
js实现图片旋转 js滚动鼠标中间对图片放大缩小
2017/07/05 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
taro开发微信小程序的实践
2019/05/21 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
Angular进行简单单元测试的实现方法实例
2020/08/16 Javascript
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
在Heroku云平台上部署Python的Django框架的教程
2015/04/20 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
python利用微信公众号实现报警功能
2018/06/10 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
CSS3的文字阴影—text-shadow的使用方法
2012/12/25 HTML / CSS
"引用"与多态的关系
2013/02/01 面试题
金融专业个人的自我评价
2013/10/18 职场文书
设计师个人求职信范文
2014/02/02 职场文书
人力资源部门的主要职能
2014/02/22 职场文书
弘扬雷锋精神活动演讲稿
2014/03/04 职场文书
安全责任书模板
2014/07/22 职场文书
小学教师自我剖析材料
2014/09/29 职场文书
班子四风对照检查材料思想汇报
2014/09/29 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
实习计划书范文
2015/01/16 职场文书
生活小常识广播稿
2015/08/19 职场文书
Python实现双向链表
2022/05/25 Python