js实现音乐播放控制

前言

音频HTML5标签,播放音频和视频的标签,之前它一直在播放音频和视频的兴趣,一直想完成一个音频和视频播放模块,这也是本文写作的初衷,最近花了一些时间来实现语音控制,也可以在不从这个小模块获取知识。

音频的实现

最初由浏览器提供的音频样式更简单,更具吸引力,其原始风格如下:


自己实现的音乐播放控制栏,效果如下:


音乐播放控制栏的功能如下:

音乐演奏(最基本)
多音乐手动切换与自动切换实现循环播放
进度条点击播放进度
进度条拖动更改
点击改变量
体积阻力变化




具体实现效果:




以下是具体功能的实现。音乐播放控制进度条的实现主要是学习和使用,不考虑兼容性。

整个

整个音乐播放控制层由浏览器音频标记实现,调用音频API实现整个功能。下面是当前控件栏的HTML结构。

































音频控制器:是控制播放和切换歌曲的区域。

音频栏:时间的领域和歌曲的进展

音量音量调节区



播放地区

音乐播放,暂停,切换到实现区域(下一步),这部分不是需要解释的,实际上是音频API(播放),暂停()播放和暂停,歌曲是切换数组元素变化,修改SRC地址。

发展区

该区域是整个模块的核心部分,该区域的主要功能点是:

进步效果的实现
滑动效应的实现




首先,这个想法是:

1。进度条由两个div组件组成:




作为最外层/暗区长度的进展

内层是实际的时间表;






2。当单击进度条时,从鼠标最近的父轴的x轴方向上点击鼠标的偏移量。

3。偏移量是内层div的实际宽度,设置背景色。

4位。滑块是用来设置左边的值,但是左边的值是:偏移量滑块宽度 2。



实施滑动,在模块的程序没有使用HTML5的拖放API,而是利用MouseDown、MouseMove、MouseUp来实现的,具体的

实现代码:


滑动效应
Bar.addEventListener('mousedown功能(e){
e.stoppropagation();
为了获得初始的x轴/轴滑块,选择了文档的相对值。
options.clientx = e.clientx;
偏移量
options.left = this.offsetleft;
options.max = bgnode.offsetwidth - this.offsetwidth / 2;
options.isdrag =真;
});
Document.addEventListener('mousemove功能(e){
e.stoppropagation();
如果(选项。isdrag){
让currentclientx = e.clientx,
左= options.left,
马克斯= options.max,
initclientx = options.clientx,
barhalfwidth = bar.offsetwidth / 2,
fgwidth = 0,
点设置为幻灯片/幻灯片(X轴偏移)
= math.max(0,Math.min(Max,左+(currentclientx - initclientx))));

bar.style.left = + 'px;
如果(barhalfwidth){
fgwidth = + barhalfwidth;
}
fgnode.style.width = math.max(0,fgwidth)+ 'px;
options.offsetx = math.max(0,fgwidth);
}
});

BgNode.parentNode.addEventListener('mouseup功能(e){
e.stoppropagation();
如果(选项。isdrag){
进度表/绘图
tools.timeupdateorvolumeupdate(options.offsetx,型);
options.isdrag = false;
}
});




简单地说,它是:

MouseMove获取当前鼠标的X轴位置的初始位置+元素的初始偏移文件,动态改变左的价值实现



进度实际上是通过div的宽度来显示的,动态地改变滑块的宽度和左边的值来达到进度的效果。

这里需要注意的是:

当前进度条的总宽度与总音频时间之间的比率关系,从而计算与不同音频时间点对应的调度的长度,这是基础。



事实上,它计算得很好。

比例:宽度/持续时间

在指定时间的宽度(宽度/时间)*时间



音量调节的实现类似于日程安排,主要是改变音量的执行。

下面是模块中的问题:

滑块的效果有时不自然流畅。

音频文件的时间处理不好。

起初,进展不太顺利。



该代码将被上传到我的GitHub,模块后当天还需要改进。

以上是本文的全部内容,希望能对您有所帮助,希望大家多多支持。