HTML5实例教程——制作酷炫音频播放器插件

简介: 上图便是这个音频播放器的UI界面图,里面还隐藏了一个歌曲的播放列表。整个播放器的UI除了大背景的人像图和歌曲的星星评分使用了图片其他全部由CSS和font-face绘制而成,看上去有难度的地方就只有CD和打碟器的制作了,在歌曲播放时CD和打碟器都是具有动画交互效果的,这个在后面的部分会讲解到。点击播放器的CD可以打开播放列表噢~

image.png

demodownload

上图便是这个音频播放器的UI界面图,里面还隐藏了一个歌曲的播放列表。整个播放器的UI除了大背景的人像图和歌曲的星星评分使用了图片其他全部由CSS和font-face绘制而成,看上去有难度的地方就只有CD和打碟器的制作了,在歌曲播放时CD和打碟器都是具有动画交互效果的,这个在后面的部分会讲解到。点击播放器的CD可以打开播放列表噢~

因为这一期的教程主要是为了展示Html5新增的<audio>标签和audio元素的Dom API的使用,所以播放器UI的绘制在这里就不详细解释了,有疑问的可以自行查看案例的CSS文件的注释或者在下方留言。


主要功能:

一、播放、暂停、上一首、下一首、音量增减

二、点击CD可以打开和关闭播放列表

三、可以拖动本地音乐文件到播放器进行播放


Html结构

<divid="myAudio"style="margin:0 auto;">

 <audio>

   <sourcetitle="王若琳 - Wild World.mp3"src="http://music.huoxing.com/upload/20121215/1355575227640_8200.mp3" />

   <sourcetitle="韦礼安 - 还是会.mp3"src="http://stream18.qqmusic.qq.com/31005070.mp3" />

   <sourcetitle="王若琳 - Lost in paradise.mp3"src="http://stream12.qqmusic.qq.com/30416842.mp3" />

 </audio>

 <divclass="music_info clearfix">

   <divclass="cd_holder"><spanclass="stick"></span><divclass="cd"></div></div>

   <divclass="meta_data">

     <spanclass="title"></span>

     <divclass="rating">

       <divclass="starbar">

         <ulclass="current-rating"data-score="85">

           <liclass="star5"></li>

           <liclass="star4"></li>

           <liclass="star3"></li>

           <liclass="star2"></li>

           <liclass="star1"></li>

         </ul>

       </div>

     </div>

     <divclass="volume_control">

       <aclass="decrease">a</a>

       <spanclass="base_bar">

         <spanclass="progress_bar"></span>

         <aclass="slider"></a>

       </span>

       <aclass="increase">b</a>

     </div>

   </div>

 </div>

 <ulclass="music_list"></ul>

 <divclass="controls">

   <divclass="play_controls">

     <aclass="btn_previous">e</a>

     <aclass="btn_play">c</a>

     <aclass="btn_next">d</a>

   </div>

   <divclass="time_line">

     <spanclass="passed_time">0:00</span>

     <spanclass="base_bar">

       <spanclass="progress_bar"></span>

     </span>

     <spanclass="total_time">0:00</span>

   </div>

 </div>

</div>


audio标签

在上面的结构中我们可以发现这个html5新增的audio标签,它具有一个controls属性,顾名思义它是播放器的控制器,controls 属性规定浏览器为音频提供播放控件,例如在chrome浏览器下的audio标签中设置该属性,播放器就会以如下的形式出现,如果不设置该属性,则会是空白一片

<audiocontrolssrc="xxx.mp3"></audio>

image.png

但由于在不同浏览器下的对audio标签渲染效果不一,这种简易的方法并不适合在跨浏览器下的使用,并且浏览器默认的播放器控件所提供的功能实在是太少了。。所以我们一般通过不设置该属性的方法来隐藏浏览器的默认播放控件,并且手工加入额外的标签和样式来定制播放器的UI界面。


播放控制

在播放器的UI界面绘制完成后,首先我们需要做的是为播放、上一首、下一首这三个主要的控制按钮添加对应的事件监听。

var myAudio = $("#myAudio audio")[0];

var$sourceList = $("#myAudio source");

var currentSrcIndex = 0;

var currentSr = "";

$(".btn_play").click(function(){

   if (myAudio.paused) {

       myAudio.play();

   } else {

       myAudio.pause();

   }

});

$(".btn_next").click(function(){

   ++currentSrcIndex > $sourceList.length - 1 && (currentSrcIndex = 0);

   currentSrc = $("#myAudio source").eq(currentSrcIndex).prop("src");

   myAudio.src = currentSrc;

   myAudio.play();

});

$(".btn_previous").click(function(){

   --currentSrcIndex < 0 && (currentSrcIndex = 0);

   currentSrc = $("#myAudio source").eq(currentSrcIndex).prop("src");

   myAudio.src = currentSrc;

   myAudio.play();

});

上述的按钮点击的事件监听中,我们通过调用原始的audio元素的play()和pause()方法来控制音频的播放和暂停。另外audio元素提供了currentSrc属性,该属性表示当前播放文件的文件源,我们通过设置该属性来控制当前播放的歌曲曲目。


音量控制

接下来我们来对音量条两边的两个小喇叭添加事件监听,使得通过点击左右两个小喇叭可以减小和增加当前播放的音量。要设置播放器的音量,我们可以调用audio元素中所提供的volume属性。volume值最大为1,最小为0,在这里我们通过每次点击喇叭增减0.1的音量来实现音量的控制。当然你也可以使用别的值。但要注意的是javascript语言不能对小数提供精准的控制,所以每次减少0.1的音量时实际上减少的音量是稍微地大于0.1的,这导致当连续点击9次音量减少的按钮时剩下0.09xxxx的音量,然后你会发现播放器怎么无法静音了。。。当然这个问题是很容易解决的(如下所示),只是稍作提醒。

$(".volume_control .decrease").click(function() {

   var volume = myAudio.volume - 0.1;

   volume < 0 && (volume = 0);

   myAudio.changeVolumeTo(volume);

});

$(".volume_control .increase").click(function() {

   var volume = myAudio.volume + 0.1;

   volume > 1 && (volume = 1);

   myAudio.changeVolumeTo(volume);

});

另外我们还需要实现使用滑动器或者点击音量条某一位置来调控音量的功能,有了上面的基础,这个就容易完成了。首先我们来看看点击音量条某一位置来调控音量的功能:

点击音量条的某一位置,计算该由音量条的起点到该位置的长度值,再用该值除以总的音量条长度(在这里是100)得到百分比值,再用该百分比值乘以最大音量值1得到所要跳跃到的音量值,再赋值给volume。

通过滑动器来调控音量的方法实现也与此类似,主要是要懂得如何计算滑动器在音量条的位置值。在此就不做详细解释,有问题可以下方留言。

$(".volume_control .base_bar").mousedown(function(ev){

   var posX = ev.clientX;

   var targetLeft = $(this).offset().left;

   var volume = (posX - targetLeft)/100;

   volume > 1 && (volume = 1);

   volume < 0 && (volume = 0);

   myAudio.changeVolumeTo(volume);

});

$(".volume_control .slider").mousedown(starDrag = function(ev) {

   ev.preventDefault();

   var origLeft = $(this).position().left;      /*滑块初始位置*/

   var origX = ev.clientX; /*鼠标初始位置*/

   var target = this;

   var progress_bar = $(".volume_control .progress_bar")[0];

   $(document).mousemove(doDrag = function(ev){

       ev.preventDefault();

       var moveX = ev.clientX - origX;        /*计算鼠标移动的距离*/

       var curLeft = origLeft + moveX; /*用鼠标移动的距离表示滑块的移动距离*/

       (curLeft < -7) && (curLeft = -7);

       (curLeft > 93) && (curLeft = 93);

       target.style.left = curLeft + "px";

       progress_bar.style.width = curLeft + 7 + "%";

       myAudio.changeVolumeTo((curLeft + 7)/100);

   });

   $(document).mouseup(stopDrag = function(){

       $(document).unbind("mousemove",doDrag);

       $(document).unbind("mouseup",stopDrag);

   });

});

时间控制

好了,现在播放器已经基本能用了,但我们还希望能够直接跳过音频的一部分到特定的时间点。那么要怎么实现呢??!制定标准的委员们也不是傻子,这种常用的功能是不会有所疏漏的拉~所以赶紧翻翻API吧,你会发现audio元素提供了一个名为currentTime的属性,非常简明易懂的名称(其实大多属性都是很好理解的),设置该属性可以设置当前播放的时间点。

在这里,我们还需要使用audio的另一个属性duration,该属性指的是当前播放文件的总时间长度。因此根据音量控制的实现,我们可以这样做:

一、点击进度条的某一位置,计算该由进度条的起点到该位置的长度占总进度条长度的百分比值(例如点击进度条的正中间位置,则进度条的起点到该位置的长度占总进度条长度的50%),记为percentage。

二、然后用percentage乘以文件的总时间长度duration就得到了你想要跳跃到的时间点的值,再把该值赋给currentTime即完成了所要实现的功能。

$(".time_line .base_bar").mousedown(function(ev){

   var posX = ev.clientX;

   var targetLeft = $(this).offset().left;

   var percentage = (posX - targetLeft)/140 * 100;

   myAudio.currentTime = myAudio.duration * percentage / 100;

});

到这里,播放器已经基本成型了。剩下一些无关痛痒(其实对我来说才是最重要的哈哈)的UI交互实现,如果大家有兴趣的话就到源码中查看吧,有问题可以在下方评论留言,或者直接微博联系本人,希望能多多交流和学习。

相关文章
|
2月前
|
移动开发 Java API
HTML 插件详解
HTML中的插件如Flash、Java applets和ActiveX控件曾广泛用于扩展网页功能,但因安全性问题和跨浏览器兼容性不佳而逐渐被淘汰。现代替代方案包括HTML5的`&lt;audio&gt;`、`&lt;video&gt;`、`&lt;canvas&gt;`和SVG等,以及WebAssembly和各种JavaScript API(如WebRTC和WebGL),这些新技术不仅提升了网页性能和安全性,还改善了用户体验。建议开发者优先采用HTML5和相关API。
|
1月前
利用html2canvas插件自定义生成名片信息并保存图片
这是一个利用html2canvas插件自定义生成名片信息并保存图片,自定义上传头像,自定义输入个人信息内容,自定义图片名称,并将生成的图片保存到本地
39 1
利用html2canvas插件自定义生成名片信息并保存图片
|
1月前
|
Web App开发 移动开发 iOS开发
HTML5 Audio(音频)
HTML5 Audio 标准允许网页直接播放音频文件,无需依赖插件。通过 `&lt;audio&gt;` 标签,开发者可以在网页中嵌入音频,支持多种格式如 MP3、WAV 和 Ogg。主流浏览器如 IE9+、Firefox、Chrome、Safari 和 Opera 均支持此功能,但不同浏览器对音频格式的支持存在差异。使用 `&lt;source&gt;` 标签可指定多个源文件,确保兼容性。
|
1月前
|
JSON 移动开发 数据格式
html5+css3+js移动端带歌词音乐播放器代码
音乐播放器特效是一款html5+css3+js制作的手机移动端音乐播放器代码,带歌词显示。包括支持单曲循环,歌词显示,歌曲搜索,音量控制,列表循环等功能。利用json获取音乐歌单和歌词,基于html5 audio属性手机音乐播放器代码。
120 6
|
2月前
|
XML 数据格式
HTML 实例解析
本文介绍了HTML中常见元素的使用方法,包括`&lt;p&gt;`、`&lt;body&gt;`和`&lt;html&gt;`等。详细解析了这些元素的结构和作用,并强调了正确使用结束标签的重要性。此外,还提到了空元素的使用及大小写标签的规范。
|
2月前
|
移动开发 HTML5
在HTML5中嵌入视频和音频
【10月更文挑战第5天】在HTML5中嵌入视频和音频。
44 3
|
2月前
|
Web App开发 移动开发 JavaScript
HTML 音频(Audio)详解
HTML5通过`&lt;audio&gt;`元素为网页音频播放提供了丰富支持。本文将介绍其基本用法、属性(如`controls`、`autoplay`)、事件监听、格式兼容性(MP3、OGG、WAV、AAC),并提供JavaScript控制示例。此外,还将讨论优化技巧,如使用CDN、懒加载及提升用户体验的方法。
|
3月前
|
移动开发 JavaScript 前端开发
HTML5 Audio(音频)详解
HTML5 通过 `&lt;audio&gt;` 标签简化了网页音频嵌入。本文详细介绍其基本语法与常用属性(如 `controls`、`autoplay`),并通过示例代码展示如何使用 JavaScript 控制音频播放及处理音频事件。此外,还提供了关于浏览器兼容性、自适应设计及无障碍访问的注意事项,助您优化音频体验。
|
5月前
WordPress插件介绍页源码单页Html源码
WordPress插件介绍页源码单页Html源码
77 2
WordPress插件介绍页源码单页Html源码
|
4月前
|
前端开发 Java 关系型数据库
通过HTML网页对mysql数据库进行增删改查(CRUD实例)
通过HTML网页对mysql数据库进行增删改查(CRUD实例)
304 0