1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何调整html中音乐播放器的大小 HTML5音乐播放器(三):播放进度 时间显示以及音

如何调整html中音乐播放器的大小 HTML5音乐播放器(三):播放进度 时间显示以及音

时间:2021-07-27 16:04:00

相关推荐

如何调整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音乐播放器(三):播放进度 时间显示以及音量的调节...

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。