基于JavaScript实现简单的音频播放功能


Posted in Javascript onJanuary 07, 2018

现效果如下:

基于JavaScript实现简单的音频播放功能

由于我这边不需要其他按钮,就没写

数据是由后台提供,在这做了个小列子

后台代码

public ActionResult MusicPlayer(int musicId=0) {
   MusicPlayerModel model = new MusicPlayerModel();
   switch (musicId)
   {
    default:
     model.MusicName = "Believe-动画《海贼王》";
     model.CoverImg = "/Content/Music/Believe-cover.jpg";
     model.FileUrl = "/Content/Music/Believe.mp3";
     model.MusicStartSecond = 0;
     model.MusicEndSecond = 227;
     break;
    case 1:
     model.MusicName = "梦回还-动画《狐妖小红娘》";
     model.CoverImg = "/Content/Music/梦回还-cover.jpg";
     model.FileUrl = "/Content/Music/梦回还.mp3";
     model.MusicStartSecond = 0;
     model.MusicEndSecond = 250;
     break;
   }
   return View(model);
  }

页面代码

@using FunctionTest.Web.Areas.Function.Models;
@model MusicPlayerModel
@{
 ViewBag.Title = "MusicPlayer";
 Layout = "~/Areas/Function/Views/Shared/_FunctionLayout.cshtml";
}
<link href="~/Assets/Function/MusicPlayer/musicPlayer.css" rel="external nofollow" rel="stylesheet" />
<script src="~/Assets/Function/MusicPlayer/musicPlayer.js"></script>
<div class="img-wapper">
 <img src="@Model.CoverImg" />
</div>
<div id="player-wapper" class="player-wapper">
 <div class="cover-wapper">
  <img src="@Model.CoverImg" />
  <div class="play">
   <i></i>
  </div>
 </div>
 <div class="info-wapper">
  <div class="title">@Model.MusicName</div>
  <audio id="audio-player" src="@Model.FileUrl" data-src="@Model.FileUrl" data-start="@Model.MusicStartSecond" data-end="@Model.MusicEndSecond" ></audio>
  <div class="audio-progress">
   <span id="start-time" class="start-time">00:00</span>
   <div id="progress" class="progress">
    <span id="player-progress-bar" class="bar">
     <i></i>
    </span>
   </div>
   <span id="end-time" class="end-time">00:00</span>
  </div>
 </div>
</div>

Js

;$(function () {
 var $playerWapper = $("#player-wapper"),
  $audioPlay = $("#audio-player"),
  startSecond = $audioPlay.data("start"),//默认开始时间(秒)
  endSecond = $audioPlay.data("end"),//默认结束时间(秒)
  playSecond = startSecond,//已播放时间(秒)
  surplusSecond = endSecond,//剩余时间(秒)
  audoiTimer = null;
 LoadingTime();
 Playing();
 //通过点击进度条实现播放跳转
 $(".progress").click(function (e) {
  //获取当前鼠标相对进度条的X坐标
  var positionX = e.pageX - $(this).offset().left; 
  var width = $(this).width();
  //进度条的X坐标/进度条宽度获取播放占比
  var progess = (positionX / width).toFixed(2);
  $("#player-progress-bar").css("width", progess);
  //播放占比*总时间获取已播放时间
  playSecond = parseInt(progess * endSecond);
  surplusSecond = endSecond - playSecond;
  //播放器跳转/跟新播放时间
  $audioPlay[0].currentTime = playSecond;
  LoadingTime();
 })
 //播放按钮点击事件
 $(".play").click(function () {
  if ($playerWapper.hasClass("playing")) {
   Pause();
  }
  else {
   Playing();
  }
 })
 //开始/继续播放
 function Playing() {
  $playerWapper.addClass("playing");
  $playerWapper.removeClass("pause");
  $audioPlay[0].play();
  audoiTimer = setInterval(function () {
   playSecond++;
   surplusSecond--;
   LoadingTime();
   if (surplusSecond <= 0) {
    playSecond = startSecond;
    surplusSecond = endSecond;
    Pause();
   }
  }, 1000); //每个1秒执行一次
 }
 //暂停播放
 function Pause() {
  $playerWapper.removeClass("playing");
  $playerWapper.addClass("pause");
  window.clearInterval(audoiTimer);
  $audioPlay[0].pause();
 }
 //加载时间和进度条
 function LoadingTime() {
  $("#start-time").html(secondToTime(playSecond));
  $("#end-time").html(secondToTime(surplusSecond));
  $("#player-progress-bar").css("width", Percentage(playSecond, endSecond));
 }
 //计算百分比
 function Percentage(second1, second2) {
  return (Math.round(second1 / second2 * 10000) / 100+ "%");// 小数点后两位百分比
 }
 //时间转换,将秒转为00:00:00格式
 function secondToTime(s) {
  var t;
  if (s > -1) {
   var hour = Math.floor(s / 3600);
   var min = Math.floor(s / 60) % 60;
   var sec = s % 60;
   if (hour < 10) {
    t = '0' + hour + ":";
   } else {
    t = hour + ":";
   }
   if (min < 10) { t += "0"; }
   t += min + ":";
   if (sec < 10) { t += "0"; }
   t += sec;
  }
  return t;
 }
})

总结

以上所述是小编给大家介绍的基于JavaScript实现简单的音频播放功能,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
在线编辑器的实现原理(兼容IE和FireFox)
Mar 09 Javascript
JS如何将UTC格式时间转本地格式
Sep 04 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
javascript制作的cookie封装及使用指南
Jan 02 Javascript
javascript用正则表达式过滤空格的实现代码
Jun 14 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
基于jQuery实现的打字机效果
Jan 16 Javascript
微信小程序通过api接口将json数据展现到小程序示例
Jan 20 Javascript
jQuery用noConflict代替$的实现方法
Apr 12 jQuery
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
Sep 06 Javascript
layui点击按钮添加可编辑的一行方法
Aug 15 Javascript
用图片替换checkbox原始样式并实现同样的功能
Nov 15 Javascript
js实现复制功能(多种方法集合)
Jan 06 #Javascript
tangram.js库实现js类的方式实例分析
Jan 06 #Javascript
JavaScript寄生组合式继承实例详解
Jan 06 #Javascript
基于jquery trigger函数无法触发a标签的两种解决方法
Jan 06 #jQuery
JS实现非首屏图片延迟加载的示例
Jan 06 #Javascript
jQuery中库的引用方法
Jan 06 #jQuery
基于JavaScript中标识符的命名规则介绍
Jan 06 #Javascript
You might like
Php获取金书网的书名的实现代码
2010/06/11 PHP
深入理解php的MySQL连接类
2013/06/07 PHP
使用php实现截取指定长度
2013/08/06 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
2015/04/15 PHP
PHP7多线程搭建教程
2017/04/21 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
Underscore.js 的模板功能介绍与应用
2012/12/24 Javascript
js全屏显示显示代码的三种方法
2013/11/11 Javascript
用javascript删除当前行,添加行(示例代码)
2013/11/25 Javascript
javascript 10进制和62进制的相互转换
2014/07/31 Javascript
jQuery实现向下滑出的平滑下拉菜单效果
2015/08/21 Javascript
基于jquery实现页面滚动时顶部导航显示隐藏
2020/04/20 Javascript
浅谈JS读取DOM对象(标签)的自定义属性
2016/11/21 Javascript
Angular.js实现注册系统的实例详解
2016/12/18 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
通过js动态创建标签,并设置属性方法
2018/02/24 Javascript
vue+webpack模拟后台数据的示例代码
2018/07/26 Javascript
在vue项目中正确使用iconfont的方法
2018/09/28 Javascript
Vue中 v-if 和v-else-if页面加载出现闪现的问题及解决方法
2018/10/12 Javascript
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
详解在网页上通过JS实现文本的语音朗读
2019/03/28 Javascript
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
2020/04/06 Javascript
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Python简单I/O操作示例
2019/03/18 Python
python3使用print打印带颜色的字符串代码实例
2019/08/22 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
python 如何读、写、解析CSV文件
2021/03/03 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
前后端结合实现amazeUI分页效果
2020/08/21 HTML / CSS
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
入党心得体会
2019/06/20 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
MySQL系列之十四 MySQL的高可用实现
2021/07/02 MySQL