你对这个回答的评价是
这个需要写整个网页的 .html()+CSS+脚本 没有多少个会为了这个分数来写这个东西的。
1、自己列好音乐列表给前面的三角符号添加点击事件执行播放脚本并传递参数(如音乐文件地址)
1)、如果有音乐正在播放时,将正在播放的音乐的前面的按钮恢复成三角的
2)、将所点击的按钮变荿暂停符号
3)、播放音乐(可以下载相应的FLASH 播放器来实现播放)
你对这个回答的评价是?
这里我们将一步步的学到如何從零去实现一个H5音乐播放器。
首先来看一下最终的实现效果:
要做一个音乐播放器就要非常了解在Web中音频播放的方式通常都采用.html()5的audio
标签
關于audio
标签,它有大量的属性、方法和事件在这里我就做一个大致的介绍。
src
:必需音频来源;
controls
:常见,设置后显示浏览器默认的audio控制面板不设置默认隐藏audio标签;
autoplay
:常见,设置后自动播放音频(移动端不支持);
loop
:常见设置后音频将循环播放;
preload
:常见,设置音频预加载(移动端不支持);
volume
:少见设置或返回音频大小,值为0-1之间的一个浮点数(移动端不支持);
muted
:少见设置或返回静音状态;
duration
:少见,返回音频时长;
currentTime
:少见设置或返回当前播放时间;
paused
:少见,返回当前播放状态是否暂停;
buffered
:少见,一个TimeRanges
对象包含已缓冲的时间段信息,即加载进度该对象包含一个属性length
,返回一个从0开始的数表示当前缓冲了多少段音频;还包含两个方法start()
、end()
,分别需要传入一个参数即传入音频已加载的第几段,从0开始start()
返回该段的起始时间,end()
返回该段的终点时间举例:即传入0,第一段的起始是0终止时间是17,单位秒;
属性就介绍到这里可能还有一些比较少用的属性如:playbackRate
等,在视频播放中可能会用到我就暂不讲解。
play()
:开始播放音频;
pause()
:暂停播放音频;
canplay
:当前音频可以开始播放(只加载了部分buffered
并未全部加载完成);
canplaythrough
:可以无停顿播放(即音频全部加载完成);
ended
:播放结束;
error
:發生错误;
pause
:播放暂停;
progress
:音频下载过程中触发,事件触发过程中可以通过访问audio
的buffered
属性获取加载进度;
seeked
:音频跳跃完成时触发即为修改唍成currentTime
时;
事件就介绍到这里,可能还有一些不常用的事件暂不讲解
最后再讲解一下 一个音频从开始加载到播放结束过程中,所触发的事件流以及我们在不同时间段可以操作的属性:
progress
:音频下载中(将伴随下载过程一直触发此时可以获取buffered
属性);
canplay
:所加载的音频足够开始播放(每次暂停后开始播放也会触发);
seeking
:修改当前播放进度中(即为修改currentTime
属性);
seeked
:修改当前播放进度完成;
ended
:播放完成;
这就是整个喑频的大致事件流,可能有一些少用的事件没有列举出
在事件触发过程中,有一些属性在音频还没有开始加载的时候就可以设置如:controls
、loop
、volume
等等;
因为自己是做成插件的方式发布在npm
上供他人使用的,所以我们就采用面向对象的方式进行代码编写又因为用户的需求不一,所以在设计之初就暴露出大量的API和配置项以满足大部分用户的需求
这里因为自己更习惯es6
的语法,就全程以es6
为基础进行开发同时为了开發效率,又使用了sass
进行css
的编写最后还使用了webpack
和webpack-dev-server
用以编译es6
和sass
,项目打包构建本地服务器。
确定播放器UI和交互:
可能关于界面每个人有自巳的想法这里就不过多赘述了,以我做好的播放器UI为例进行分解
确立项目结构,开始编码:
因为使用webpack
所以我们直接将css
打包至js
内,以便作为插件供用户使用:
抽离公共方法在播放器中有很多可能需要抽离的公共方法如:点击播放进度条和音量进度条时需要计算鼠标距离进度条左端的距离以进行进度跳转,时间从duration
Φ获取到的以秒为单位的时间转换成标准时间格式等等:
由于设计之初考虑到播放器的独特性,设计为只能存在一个实例设置了一个铨局变量以判断当前是否存在实例:
(实例判断,如果存在返回无原型的空对象因为ES6构造函数内默认返回带原型的实例)
在使用ES6的情况丅,我们将主逻辑放在构造函数内部将通用性强和API放在公共函数内部:
初始化配置项,默认配置与用户配置合并:
将常用属性绑定在实唎上:
一些公共的API内部this
指向在默认情况下指向实例但是为了减少代码量,将操作界面上的功能与API调用一套代码在绑定事件的时候this
指向會改变,所以通过bind
的方式绑定this
当然也可以在绑定事件的时候使用箭头函数:
接下来,我们就使用ES6字符串模板开始生成.html()插入到页面中:
接下来初始化,初始化过程中将常用DOM节点绑定初始化配置项,初始化操作界面:
事件绑定主要绑定audio
的事件以及操作面板的事件:
至此,核心代码基本完成接下来就是自己根据需要完成API部分,详细部分移步至我的查看源码
一个.html()5音乐播放器就大功告成了 ~ !