时间真是不够用,只能晚上抽空把功能完善了,这节我们说下歌曲播放进度,时间显示以及音量的调节这三个部分。

一.歌曲播放进度

这个功能用到的 audio api 主要有:

currentTime() :以秒为单位返回从开始播放到目前所花的时间,也可设置 currentTime 的值来跳转到特定位置;

duration:获取媒体文件的播放时长,以秒为单位,如果无法获取,则为 NaN;

歌曲进度:首先先设置一个定时器,分别获取这两个值,用当前播放的秒数除以歌曲总秒数,再乘以歌曲进度条的总宽度(px),就能算出歌曲进度条一秒钟可以走多少了。

歌曲进度调节:点击进度条的某个位置,歌曲跳转到响应位置,这个功能的实现是先获取到点击的位置距离进度条最左边的长度(让 Firefox 支持 offsetX、offsetY),接着获得这段距离在整个进度条的长度里所占的百分比,用这个百分比乘以歌曲的总长度,就能算出该给 currentTime 设置的值了。

/**

* 歌曲播放进度,播放时间

*/

//---------------------------------------------------【功能:播放进度,播放时间】

MUSICENGINE.prototype.playbackProgress = function(playSwitch){

var progressRateColor = document.getElementById("progressRateColor"),

songSchedule = 0,

timeall,

currenttime,

timer;

if(playSwitch === "play"){

timer = setInterval(function(){

var mPlayer = document.getElementById("musicEngine");

//获取歌曲总时间

timeall = timeAll();

//获取歌曲当前播放时间

currenttime = currentTime();

//计算歌曲播放时间

songPlaybackTime(timeall,currenttime);

//计算进度条宽度并赋值

songSchedule = (currenttime / timeall) * 262;

progressRateColor.style.width = songSchedule + "px";

//当歌曲播放完毕后

if(mPlayer.ended){

//清除定时器,进度条归零,播放下一首

clearInterval(timer);

progressRateColor.style.width = 0;

document.getElementById("next").click();

}

},1000);

}

if(playSwitch === "pause"){

clearInterval(timer);

}

};

//---------------------------------------------------【功能:歌曲进度调节】

MUSICENGINE.prototype.songProgressAdjust = function(time){

this.musicPlayer.currentTime = time;

};

//---------------------------------------------------【歌曲进度变化过程】

function getSongProgress(event){

var progressRateBg = document.getElementById("progressRateBg"),

mplayer = document.getElementById("musicEngine"),

progressBP,

SongProgress;

//获得距相对元素距离的百分比

var coord = coordinate(event),

offsetCoord_X = coord.coord_X;

//计算进度条的宽度

songScheduleChange(offsetCoord_X);

//计算进度条的宽度百分比

progressBP = progressBarPercentage(262,offsetCoord_X) / 100;

//真实的歌曲进度数值

SongProgress = progressBP * mplayer.duration;

return SongProgress;

}

//---------------------------------------------------【歌曲进度条变化】

function songScheduleChange(size){

var progressRateColor = document.getElementById("progressRateColor");

progressRateColor.style.width = size + "px";

}

//---------------------------------------------------【获取歌曲总时间】

function timeAll(){

var mPlayer = document.getElementById("musicEngine");

if(mPlayer.currentTime != 0){

return mPlayer.duration;

}else{

return 0;

}

}

//---------------------------------------------------【获取歌曲当前播放时间】

function currentTime(){

var mPlayer = document.getElementById("musicEngine");

return mPlayer.currentTime;

}

二.歌曲时间显示

用到的 api 同上。

歌曲显示:在计算歌曲进度的定时器内,不断发送歌曲的播放时间和总时间,左边的时间为歌曲的播放时间,也就是 currentTime 的值,右边的时间用总时间减去 currentTime ,并将它们转换为我们需要的格式即可。

//---------------------------------------------------【计算歌曲播放时间】

function songPlaybackTime(timeall,currenttime){

var playTime = document.getElementById("playTime"),

surplusTime = document.getElementById("surplusTime"),

leftTime,

rightTime;

if(currenttime < timeall){

//左边时间

leftTime = parseInt(currenttime);

//右边时间

rightTime = parseInt(timeall - currenttime);

//输出时间

playTime.innerHTML = conversionTime(leftTime);

surplusTime.innerHTML = "-" + conversionTime(rightTime);

}else{

//播放完毕

playTime.innerHTML = "0:00";

surplusTime.innerHTML = "-0:00";

}

}

//---------------------------------------------------【将剩余秒数转化为标准格式】

function conversionTime(time){

var surplusMinite,

surplusSecond,

cTime;

//将剩余秒数转化为分钟

surplusMinite = Math.floor((time / 60) % 60);

//将剩余秒数转化为秒钟

surplusSecond = Math.floor(time % 60);

if(surplusSecond < 10){

surplusSecond = "0" + surplusSecond;

}

cTime = surplusMinite + ":" + surplusSecond;

return cTime;

}

三.音量的调节

用到的 api 有:

volume:在0.0到1.0间设置音量值,或查询当前音量值;

音量调节:这个功能实现起来很简单,把 volume 的值设为 0.0,就静音了。在控件上调节音量的原理和也歌曲的进度条一样,判断点击位置距离第一个相对元素 Y 轴上最顶端的位置,然后再进一步计算出具体的数值,注意数值的格式,别超过1,并且小数点后只有1位。

/**

* 音量控制

*/

//---------------------------------------------------【功能:静音切换】

MUSICENGINE.prototype.volume = function(muteSwitch){

var volumeSizeColor = document.getElementById("volumeSizeColor"),

volumeSizeSave = parseInt(volumeSizeColor.style.height);

//设为静音

if(muteSwitch === "on"){

//记录静音前的音量大小

volumeSizeColor.attributes["data-volume"].nodeValue = this.musicPlayer.volume;

//记录静音前的元素高度

volumeSizeColor.attributes["data-height"].nodeValue = volumeSizeSave;

this.musicPlayer.volume = 0.0;

//音量图标切换 - 打开静音

volumeIconSwitch("on");

//音量控件的音量条变化(100为元素高度)

volumeSize(100);

}

//取消静音

if(muteSwitch === "off"){

this.musicPlayer.volume = volumeSizeColor.attributes["data-volume"].nodeValue;

//音量图标切换 - 关闭静音

volumeIconSwitch("off");

//音量控件的音量条变化

volumeSize(volumeSizeColor.attributes["data-height"].nodeValue);

}

};

//---------------------------------------------------【功能:音量控制条】

MUSICENGINE.prototype.volumeControlStrip = function(realVolume){

this.musicPlayer.volume = realVolume;

if(realVolume > 0){

//音量图标切换 - 关闭静音

volumeIconSwitch("off");

}else{

//音量图标切换 - 打开静音

volumeIconSwitch("on");

}

};

//---------------------------------------------------【音量变化过程】

function VolumeChangeProcess(event){

var volumeSizeBg = document.getElementById("volumeSizeBg"),

progressBP,

realVolume;

//获得距相对元素距离的百分比

var coord = coordinate(event),

offsetCoord_Y = coord.coord_Y;

//音量杆动画变化

progressBP = progressBarPercentage(48,offsetCoord_Y);

volumeSize(progressBP);

//真实的音量数值0.0~1.0

realVolume = parseInt((100 - progressBP) / 10) / 10;

return realVolume;

}

//---------------------------------------------------【音量的图标切换】

function volumeIconSwitch(muteSwitch){

var nowVolume = document.getElementById("nowVolume"),

nowMute = document.getElementById("nowMute"),

volume = document.getElementById("volume"),

mute = document.getElementById("mute"),

volumeSizeColor = document.getElementById("volumeSizeColor");

//打开静音

if(muteSwitch === "on"){

//静音的显示图标变化

hide(nowVolume);

show(nowMute);

//音量控件的图标变化

hide(volume);

show(mute);

//音量为0时,让音量杆也为0,优化视觉

volumeSizeColor.style.height = "100%";

}

//关闭静音

if(muteSwitch === "off"){

//静音的显示图标变化

hide(nowMute);

show(nowVolume);

//音量控件的图标变化

hide(mute);

show(volume);

}

}

//---------------------------------------------------【音量控件的音量条变化】

function volumeSize(size){

var volumeSizeColor = document.getElementById("volumeSizeColor");

volumeSizeColor.style.height = size + "%";

}

//---------------------------------------------------【音量控件显示&隐藏,大小调节】

(function(){

var nowVolume = document.getElementById("nowVolume"),

nowMute = document.getElementById("nowMute"),

volumeControl = document.getElementById("volumeControl");

//音量控件显示&隐藏

nowVolume.onmouseover = function(){

show(volumeControl);

};

nowMute.onmouseover = function(){

show(volumeControl);

};

//解决onmouseout事件遇到子元素时,也触发onmouseout的BUG

volumeControl.onmouseout = function(event){

var Event = event || window.event;

if(Event){

if(volumeControl.contains(Event.relatedTarget||Event.toElement)){

//如果是子元素,结束函数

return false;

}else{

//触发的事件

hide(volumeControl);

}

}

};

})();

播放器到现在还没做完,很多地方还需要完善,个人感觉用  api 简单的实现功能很简单,但要把体验做好还是挺费事的,很多功能都相互交叉,需要好好考虑的地方还挺多,努力吧,一定要做到桌面版播放器的体验效果:)

如何调整html中音乐播放器的大小,HTML5音乐播放器(三):播放进度,时间显示以及音量的调节...相关推荐

  1. 仿网易云音乐html代码,仿网易云音乐外链播放器UI的HTML5音乐播放器插件

    简要教程 APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插 ...

  2. html5自动播放音乐外链,仿网易云音乐外链播放器UI的HTML5音乐播放器插件

    APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插件. 安装 ...

  3. 如何调整html中音乐播放器的大小,html5实现在线响应式音乐播放器

    大基发猿U移近础开未C变近础开未C变近础开概很早的时候就有想法做一个音乐播放器玩玩,以前可能还考虑过做APP,大一的时候第一个html的静态页面也是做的音乐网站,想想,大概小时候比较喜欢音乐吧.然而, ...

  4. html5网页中加入播放器,6 个 HTML5 的多媒体播放器

    是 HTML5 中新引入的标签,用来在 Web 网页中嵌入视频播放功能,无需 Flash 和其他嵌入式插件的支持,是浏览器内建的功能,不过 旨在一些高级浏览器中支持,例如Firefox, Safari ...

  5. fr4走线宽度_如何调整PCB中走线宽度的大小

    铜是一种具有高熔点的强导体,但您仍应尽力保持低温.在这里,您需要适当调整走线宽度的大小,以将温度保持在一定范围内.但是,这是您需要考虑给定走线中流动的电流的地方.当使用电源轨,高压组件以及电路板的其他 ...

  6. 米云影视html5播放器,网页制作HTML5自定义视频播放器源码

    video对象 兼容性写法 您的浏览器不支持,请升级您的浏览器 video 标签 width height autoplay muted poster带有预览图(海报图片)的视频播放器 选中video ...

  7. 用html5播放两个视频,HTML5视频 - 如何进行无缝播放和/或几个视频循环?

    尝试过各种各样的事情后,我终于能够创造出似乎是一个工作解决方案.我还没有在旧版浏览器或其他操作系统上测试过这个版本,但是这个版本可以在最新版本的Chrome,IE,Firefox和Opera上运行. ...

  8. jQuery+html5音乐网站mp3播放器代码

    播放器演示 jQuery+html5音乐网站mp3播放器代码演示 播放器介绍 jQuery+html5音乐网站mp3播放器代码 1. 支持显示播放进度条: 2. 支持拖动播放功能: 3. 支持显示音量 ...

  9. 开源音乐播放器_使用开源音乐播放器设计生活中的配乐

    开源音乐播放器 我们围绕着自己的个人配乐. 我们的音乐让我们想起了人生中最重要的时刻,并帮助我们塑造了自己的感受和看法. 让音乐播放器支持自由选择音乐的播放方式,同时又不影响播放质量非常重要,而且我一 ...

最新文章

  1. ​相似算法比较:递归、分治、动态规划、贪心、回溯、分支限界​
  2. 看!我写的关于“简单异或”加密的破解分析演示程序!
  3. redis有值查询返回null_Redis缓存穿透、缓存并发、热点缓存之最佳招式
  4. SpringMVC自动配置||如何修改SpringBoot的默认配置
  5. 摩托罗拉能否追回逝去的那些年?
  6. SAP CRM系统到底有多少种订单类型
  7. 又一个基于 Esbuild 的神器!esno
  8. 初学大数据之模块集成:Pycharm安装numpy,scipy,sklearn等包时遇到的各种问题的一键解决方法
  9. Cisco自反控制列表的应用
  10. java方法被编译器调用_我异常了,快来捕获我,Java异常简述
  11. android map 多线程,Android多线程(一)
  12. 如何在Win7旗舰版中安装并设置IIS
  13. LeetCode:Path Sum
  14. 爬取斗鱼所有房间及直播源
  15. arm上移植iconv命令
  16. Web加固linux,Linux安全加固之中间件Tomcat
  17. JDBC————PreparedStatement批处理
  18. MFQPPDCS测试理论(海盗派测试分析)
  19. DNT精英论坛(暨.NET北京俱乐部)第1期:见证.NET,风口上的成功案例!
  20. 微信小程序之头像裁剪,添加字幕,生成新图片下载等 解决真机调试和开发者工具 图片不显示等问题

热门文章

  1. c语言计算阶乘的倒数和,for循环计算某个数的阶乘、阶乘和及其倒数的阶乘和...
  2. 求一元二次方程的根(c++基础)
  3. linux常用命令加实例大全
  4. 用c++设计i一个伪距单点定位程序
  5. 小练笔:求最大公约数和最小公倍数
  6. 使用定时器的中断方式。具体功能描述如下:使用定时器控制三位数码管显示时间,也可以轻易改为两位数码管显示时间
  7. 折腾记录,win11局域网文件夹共享
  8. rda分析怎么做_R语言做冗余分析(RDA)的一个简单小例子
  9. 小企鹅fcitx输入法导入搜狗scel词库方法
  10. 计算机网络知识点总结之物理层(二)