如何调整html中音乐播放器的大小,HTML5音乐播放器(三):播放进度,时间显示以及音量的调节...
时间真是不够用,只能晚上抽空把功能完善了,这节我们说下歌曲播放进度,时间显示以及音量的调节这三个部分。
一.歌曲播放进度
这个功能用到的 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音乐播放器(三):播放进度,时间显示以及音量的调节...相关推荐
- 仿网易云音乐html代码,仿网易云音乐外链播放器UI的HTML5音乐播放器插件
简要教程 APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插 ...
- html5自动播放音乐外链,仿网易云音乐外链播放器UI的HTML5音乐播放器插件
APlayer是一款仿网易云音乐外链播放器UI的HTML5音乐播放器插件.APlayer音乐播放器可以自定义歌曲封面,可以自定义同步歌词等,界面时尚大方,是一款非常好的HTML5音乐播放器插件. 安装 ...
- 如何调整html中音乐播放器的大小,html5实现在线响应式音乐播放器
大基发猿U移近础开未C变近础开未C变近础开概很早的时候就有想法做一个音乐播放器玩玩,以前可能还考虑过做APP,大一的时候第一个html的静态页面也是做的音乐网站,想想,大概小时候比较喜欢音乐吧.然而, ...
- html5网页中加入播放器,6 个 HTML5 的多媒体播放器
是 HTML5 中新引入的标签,用来在 Web 网页中嵌入视频播放功能,无需 Flash 和其他嵌入式插件的支持,是浏览器内建的功能,不过 旨在一些高级浏览器中支持,例如Firefox, Safari ...
- fr4走线宽度_如何调整PCB中走线宽度的大小
铜是一种具有高熔点的强导体,但您仍应尽力保持低温.在这里,您需要适当调整走线宽度的大小,以将温度保持在一定范围内.但是,这是您需要考虑给定走线中流动的电流的地方.当使用电源轨,高压组件以及电路板的其他 ...
- 米云影视html5播放器,网页制作HTML5自定义视频播放器源码
video对象 兼容性写法 您的浏览器不支持,请升级您的浏览器 video 标签 width height autoplay muted poster带有预览图(海报图片)的视频播放器 选中video ...
- 用html5播放两个视频,HTML5视频 - 如何进行无缝播放和/或几个视频循环?
尝试过各种各样的事情后,我终于能够创造出似乎是一个工作解决方案.我还没有在旧版浏览器或其他操作系统上测试过这个版本,但是这个版本可以在最新版本的Chrome,IE,Firefox和Opera上运行. ...
- jQuery+html5音乐网站mp3播放器代码
播放器演示 jQuery+html5音乐网站mp3播放器代码演示 播放器介绍 jQuery+html5音乐网站mp3播放器代码 1. 支持显示播放进度条: 2. 支持拖动播放功能: 3. 支持显示音量 ...
- 开源音乐播放器_使用开源音乐播放器设计生活中的配乐
开源音乐播放器 我们围绕着自己的个人配乐. 我们的音乐让我们想起了人生中最重要的时刻,并帮助我们塑造了自己的感受和看法. 让音乐播放器支持自由选择音乐的播放方式,同时又不影响播放质量非常重要,而且我一 ...
最新文章
- ​相似算法比较:递归、分治、动态规划、贪心、回溯、分支限界​
- 看!我写的关于“简单异或”加密的破解分析演示程序!
- redis有值查询返回null_Redis缓存穿透、缓存并发、热点缓存之最佳招式
- SpringMVC自动配置||如何修改SpringBoot的默认配置
- 摩托罗拉能否追回逝去的那些年?
- SAP CRM系统到底有多少种订单类型
- 又一个基于 Esbuild 的神器!esno
- 初学大数据之模块集成:Pycharm安装numpy,scipy,sklearn等包时遇到的各种问题的一键解决方法
- Cisco自反控制列表的应用
- java方法被编译器调用_我异常了,快来捕获我,Java异常简述
- android map 多线程,Android多线程(一)
- 如何在Win7旗舰版中安装并设置IIS
- LeetCode:Path Sum
- 爬取斗鱼所有房间及直播源
- arm上移植iconv命令
- Web加固linux,Linux安全加固之中间件Tomcat
- JDBC————PreparedStatement批处理
- MFQPPDCS测试理论(海盗派测试分析)
- DNT精英论坛(暨.NET北京俱乐部)第1期:见证.NET,风口上的成功案例!
- 微信小程序之头像裁剪,添加字幕,生成新图片下载等 解决真机调试和开发者工具 图片不显示等问题
热门文章
- c语言计算阶乘的倒数和,for循环计算某个数的阶乘、阶乘和及其倒数的阶乘和...
- 求一元二次方程的根(c++基础)
- linux常用命令加实例大全
- 用c++设计i一个伪距单点定位程序
- 小练笔:求最大公约数和最小公倍数
- 使用定时器的中断方式。具体功能描述如下:使用定时器控制三位数码管显示时间,也可以轻易改为两位数码管显示时间
- 折腾记录,win11局域网文件夹共享
- rda分析怎么做_R语言做冗余分析(RDA)的一个简单小例子
- 小企鹅fcitx输入法导入搜狗scel词库方法
- 计算机网络知识点总结之物理层(二)