现效果如下:

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

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

后台代码

public ActionResult MusicPlayer(int musicId=) {
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 = ;
model.MusicEndSecond = ;
break;
case :
model.MusicName = "梦回还-动画《狐妖小红娘》";
model.CoverImg = "/Content/Music/梦回还-cover.jpg";
model.FileUrl = "/Content/Music/梦回还.mp3";
model.MusicStartSecond = ;
model.MusicEndSecond = ;
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="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">:</span>
<div id="progress" class="progress">
<span id="player-progress-bar" class="bar">
<i></i>
</span>
</div>
<span id="end-time" class="end-time">:</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;
}
})

Js实现简单的音频播放的更多相关文章

  1. js 实现文字转音频播放

    var msg = new SpeechSynthesisUtterance("hello World"); console.log(msg); window.speechSynt ...

  2. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (采用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  3. 最简单的基于FFMPEG+SDL的音频播放器 ver2 (採用SDL2.0)

    ===================================================== 最简单的基于FFmpeg的音频播放器系列文章列表: <最简单的基于FFMPEG+SDL ...

  4. [小程序开发] 微信小程序audio音频播放组件+api_wx.createAudioContext

    引言: audio是微信小程序中的音频组件,可以轻松实现小程序中播放/停止音频等自定义动作. 附上微信小程序audio组件的相关属性说明:https://mp.weixin.qq.com/debug/ ...

  5. ios开发——实用技术篇&网络音频播放

    网络音频播放 在日常的iOS开发中,我们通常会遇到媒体播放的问题,XCode中已经为我们提供了功能非常强大的AVFoundation框架和 MediaPlayer框架.其中AVFoundation框架 ...

  6. IOS 音频播放

    iOS音频播放 (一):概述 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改我也因此对于iOS下的音频播放实现有了一定的研究.写这个系列的博客目的一方面希望能够抛砖 ...

  7. 第38章 I2S—音频播放与录音输入—零死角玩转STM32-F429系列

    第38章     I2S—音频播放与录音输入 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/ ...

  8. 11.QT-ffmpeg+QAudioOutput实现音频播放器

    1.前言      由于QAudioOutput支持的输入数据必须是原始数据,所以播放mp3,WAV,AAC等格式文件,需要解封装后才能支持播放.      而在QT中,提供了QMediaPlayer ...

  9. IOS开发之简单音频播放器

    今天第一次接触IOS开发的UI部分,之前学OC的时候一直在模拟的使用Target-Action回调模式,今天算是真正的用了一次.为了熟悉一下基本控件的使用方法,和UI部分的回调,下面开发了一个特别简易 ...

随机推荐

  1. 在linux云服务器上运行Jar文件

    在linux服务器上运行Jar文件时通常的方法是: $ java -jar test.jar 这种方式特点是ssh窗口关闭时,程序中止运行.或者是运行时没法切出去执行其他任务,有没有办法让Jar在后台 ...

  2. SpringData JPA复合主键

    上一篇博客简单介绍了SpringData JPA实现简单的CRUD,分页与多条件的排序,那里的主键类型是Long,有时我们会遇到主键不是一个的,复合主键,经过调研如下.确定一个人,不能只根据他的姓名来 ...

  3. 网络请求及各类错误代码含义总结(包含AFN错误码大全)

    碰见一个很奇葩的问题, 某些手机在设置了不知什么后, 某些 APP 死活 HTTPS 请求失败, 例如以 UMeng 统计HTTP 请求失败为例, Log如下: UMLOG: (Error   App ...

  4. java中mongo的条件查询

    @Override public Page<ProductInfo> findAll(Pageable pageable, ProductInfo productInfo) { //创建一 ...

  5. UVA_11020 Efficient Solutions 【平衡二叉搜索树set用法】

    一.题面 UVA11020 二.分析 最近脑子有点不好使吧,这题还想了很久. 对于给定的两个值要满足题面中的条件,那么我们可以把这两个值转化到平面中的坐标去理解. 首先,需要考虑的是维护的所有点其实是 ...

  6. VS 代码自动对齐快捷键

    全部代码代码自动对齐快捷键为 Ctrl + a(按后可松松手) + k(按后可松松手) + f

  7. Windows网络服务渗透攻击分类

    网络服务渗透攻击分为三类 一.针对于windows系统自带的网络服务的渗透攻击 1.针对于NetBIOS的攻击 NetBIOS以运行在TCP/IP系统中的NBT协议来实现,具体包括在UDP的137端口 ...

  8. Q72 编辑距离

    给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: 输 ...

  9. 开源一个C# Class实现Openfire登陆、推出、消息发送,方便其他系统集成IM功能了

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  10. MD5 工具类

    package com.payease.chains.risk.utils; /** * md5密码加密工具类 * Created by liuxiaoming on 2017/8/28. */ pu ...