基于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 相关文章推荐
JavaScript 获取用户客户端操作系统版本
Aug 25 Javascript
javascript suggest效果 自动完成实现代码分享
Feb 17 Javascript
原生的html元素选择器类似jquery选择器
Oct 15 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
Jquery判断radio、selelct、checkbox是否选中及获取选中值方法总结
Apr 15 Javascript
深入浅析Vue组件开发
Nov 25 Javascript
详解Nuxt.js部署及踩过的坑
Aug 07 Javascript
Vue中mintui的field实现blur和focus事件的方法
Aug 25 Javascript
浅谈JavaScript面向对象--继承
Mar 20 Javascript
详解a标签添加onclick事件的几种方式
Mar 29 Javascript
了解JavaScript中的选择器
May 24 Javascript
使用Vue Composition API写出清晰、可扩展的表单实现
Jun 10 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
elgg 获取文件图标地址的方法
2010/03/20 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
laravel 中某一字段自增、自减的例子
2019/10/11 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
Webpack 实现 AngularJS 的延迟加载
2016/03/02 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
很棒的vue弹窗组件
2017/05/24 Javascript
JS实现简单抖动效果
2017/06/01 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
vue按需加载实例详解
2019/09/06 Javascript
layui原生表单验证的实例
2019/09/09 Javascript
vue+elementUI动态生成面包屑导航教程
2019/11/04 Javascript
node.js 微信开发之定时获取access_token
2020/02/07 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
Python探索之静态方法和类方法的区别详解
2017/10/27 Python
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
在Python文件中指定Python解释器的方法
2019/02/18 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
美国专业级皮肤病和spa品质护肤品的高级零售网站:SkinCareRx
2017/02/06 全球购物
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
公司委托书格式范文
2014/04/04 职场文书
体育运动会广播稿
2014/10/05 职场文书
市委常委会班子党的群众路线教育实践活动整改方案
2014/10/25 职场文书
家庭财产分割协议范文
2014/11/24 职场文书
安全责任书
2015/01/29 职场文书
2015年国税春训心得体会
2015/03/09 职场文书
个人廉政承诺书
2015/04/28 职场文书
CSS3实现三角形不断放大效果
2021/04/13 HTML / CSS
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python