自己基于豆瓣FM的ui仿写qq音乐时,基于Jquery手写的进度条插件,效果图如下:
主要特色:
① 可自适应挂载元素的宽度,也可以自己设置进度条宽度;
② 支持部分默认参数修改(具体见使用说明);
③ 允许最大时间为23:59:59,高于此值将默认修改为此值;
④ 可以自己控制进度条动画的开关及重置;
⑤ 可以获取进度条当前时间和宽度,与H5的audio标签协调使用。
使用说明:
/* * 功能描述:播放器进度条 * 参数: * ????????????option:挂载父元素 * ????????????inTime:进度条时间长度 * 示例: * ????????????$.playBar.addBar($(‘.wrap‘),400); ???-- 初始化进度条 * ????????????$.playBar.setDefault({ ??????????????-- 默认参数修改 * ???????????????width:200, ????????????????????????????-- 进度条宽度 * ???????????????bgColor:‘blue‘, ???????????????????????-- 进度条背景颜色 * ???????????????progressColor:‘red‘, ??????????????????-- 进度条颜色 * ???????????????ballColor:‘yellow‘, ???????????????????-- 拖动触发小圆球颜色 * ???????????????beginColor:‘lightgrey‘, ???????????????-- 初始时间字体颜色 * ???????????????finishColor:‘gray‘ ?????????????????????-- 结束时间字体颜色 * ???????????}) * ????????????$.playBar.beginPlay(); ??????????????-- 播放进度条 * ????????????$.playBar.endPlay(); ????????????????-- 结束播放进度条 * ????????????$.playBar.resetPlay(200); ???????????-- 重置进度条,参数为新输入时间 */
插件源码:
(function($,document){ ???//定义初始化变量、方法构造函数 ???var InitVariables = function(){ ???????this.barWidth = null; ???????????????????//进度条宽度 ???????this.barTime = null; ????????????????????//进度条展示时间 ???????this.onOff ???= false; ??????????????????//记录进度条是否进行播放 ???????this.timer = null; ??????????????????????//记录播放定时器 ???????this.curTime = 0; ???????????????????????//记录当前播放时间 ???????this.curWidth = 0; ??????????????????????//记录当前播放时间对应的宽度 ???????this.ballEl = null; ???????this.timeBeginEl = null; ???????this.timeEndEl = null; ???????this.bgEl = null; ???????this.curTimeEl = null; ???} ???InitVariables.prototype = { ???????‘setWidth‘:function(w){ ???????????????????//设置进度条宽度 ???????????this.barWidth = w; ???????????this.bgEl.width(w); ???????}, ???????‘setTime‘:function(t){ ????????????????????//设置进度条时间 ???????????this.barTime = t; ???????}, ???????‘setBGColor‘:function(color){ ?????????????//设置进度条背景色 ???????????this.bgEl.css(‘background-color‘,color); ???????}, ???????‘setProgressColor‘:function(color){ ???????//设置进度条颜色 ???????????this.curTimeEl.css(‘background-color‘,color); ???????}, ???????‘setBallColor‘:function(color){ ???????????//设置拖动小球颜色 ???????????this.ballEl.css(‘background-color‘,color); ???????}, ???????‘setBeginColor‘:function(color){ ??????????//设置起始时间 ???????????this.timeBeginEl.css(‘color‘,color); ???????}, ???????‘setFinishColor‘:function(color){ ?????????//设置结束时间 ???????????this.timeEndEl.css(‘color‘,color); ???????}, ???????‘timeToString‘:function(time){ ????????????//时间转00:00:00样式 ???????????if(time>24*3600){ ???????????????console.log("Error In ‘timeToString‘:输入时间超过允许值,已默认修改为24*3600-1"); ???????????????time = 24*3600-1; ???????????} ???????????var strHour = parseInt(time/3600)>0 ? ((parseInt(time/3600)>9 ? ‘‘ : ‘0‘) + parseInt(time/3600)) : false; ???????????var strMinute = (parseInt(time/60%60)>9 ? ‘‘ : ‘0‘) + parseInt(time/60%60); ???????????var strSecond = (parseInt(time%60)>9 ? ‘‘ : ‘0‘) + parseInt(time%60); ???????????return strHour ? strHour+‘:‘+strMinute+‘:‘+strSecond: strMinute+‘:‘+strSecond; ???????}, ???????‘beginPlay‘:function(){ ???????????????????//开始运动指令 ???????????var that = this; ???????????this.onOff = !this.onOff; ???????????this.timer=setInterval(that.changeBar.bind(this),1000); ???????}, ???????‘stopPlay‘:function(){ ????????????????????//停止运动指令 ???????????this.onOff = !this.onOff; ???????????clearInterval(this.timer); ???????}, ???????‘resetPlay‘:function(){ ???????????????????//重置指令 ???????????this.curTime = 0; ???????????this.curWidth = 0; ???????????this.curTimeEl.css("width",this.curWidth); ???????????this.ballEl.css("left",this.curWidth-this.ballEl.width()/2); ???????????this.timeBeginEl.html(this.timeToString(this.curTime)); ???????????this.timeEndEl.html(this.timeToString(this.barTime)); ???????}, ???????‘changeBar‘:function(){ ???????????????????//动态改变函数 ???????????this.curTime++; ???????????this.curWidth = this.curTime*this.barWidth/this.barTime; ???????????if (this.curWidth>=this.barWidth){this.stopPlay();this.resetPlay();} ???????????this.curTimeEl.css("width",this.curWidth); ???????????this.ballEl.css("left",this.curWidth-this.ballEl.width()/2); ???????????this.timeBeginEl.html(this.timeToString(this.curTime)); ???????}, ???????‘moveEvent‘:function(ballEl,curTimeEl,contentEl){ ???????//拖动函数 ???????????var that = this; ???????????ballEl.on(‘mousedown‘,function(ev){ ???????????????var e=ev||document.event; ???????????????var disX=event.clientX; ???????????????e.preventDefault(); ???????????????e.stopPropagation(); ???????????????if (that.onOff){ clearInterval(that.timer);} ???????????????$(document).on(‘mousemove‘,function(ev){ ???????????????????var e=ev||document.event; ???????????????????e.preventDefault(); ???????????????????var newX=event.clientX; ???????????????????var lefts=e.clientX-contentEl.offset().left; ???????????????????if (lefts>that.barWidth){ ???????????????????????lefts=that.barWidth; ???????????????????}else if(lefts<0){ ???????????????????????lefts=0; ???????????????????} ???????????????????that.curWidth = lefts; ???????????????????that.curTime = parseInt(that.curWidth/that.barWidth*that.barTime); ???????????????????that.curTimeEl.css("width",that.curWidth); ???????????????????that.ballEl.css("left",that.curWidth-that.ballEl.width()/2); ???????????????????that.timeBeginEl.html(that.timeToString(that.curTime)); ???????????????}); ???????????????$(document).on(‘mouseup‘,function(){ ???????????????????if (that.onOff){ that.timer=setInterval(that.changeBar.bind(that),1000);} ???????????????????$(document).off(‘mousemove mouseup‘); ???????????????}); ???????????}) ???????} ???} ???//初始化变量对象 ???var init = new InitVariables(); ???$.playBar={ ???????//初始化进度条 ???????‘addBar‘:function(option,inTime){ ???????????if (arguments.length<2){return false;} ???????????init.setTime(inTime); ???????????option.empty(); ???????????//载入DOM元素 ???????????option.append($( ???????????????`<div class=‘progress-bar‘> ???????????????????<div class=‘progress-bar-begin‘>00:00</div> ???????????????????<div class="progress-bar-content"> ???????????????????????<div class="progress-bar-ball"></div> ???????????????????????<div class="progress-bar-cur"></div> ???????????????????</div> ???????????????????<div class="progress-bar-finish">${init.timeToString(inTime)}</div> ???????????????</div> ???????????`)); ???????????//获取DOM元素 ???????????init.ballEl = $(‘.progress-bar-ball‘); ???????????init.timeBeginEl = $(‘.progress-bar-begin‘); ???????????init.timeEndEl = $(‘.progress-bar-finish‘); ???????????init.bgEl = $(‘.progress-bar-content‘); ???????????init.curTimeEl = $(‘.progress-bar-cur‘); ???????????//初始化进度条宽度 ???????????init.barWidth = init.bgEl.width(); ???????????//绑定滑动事件 ???????????init.moveEvent(init.ballEl,init.curTimeEl,init.bgEl); ???????}, ???????‘beginPlay‘:function(){ ???????????init.beginPlay(); ???????}, ???????‘endPlay‘:function(){ ???????????init.stopPlay(); ???????}, ???????‘resetPlay‘:function(time){ ???????????init.setTime(time); ???????????init.resetPlay(); ???????}, ???????‘setDefault‘:function(obj){ ???????????if(obj.width){init.setWidth(obj.width);} ???????????if(obj.bgColor){init.setBGColor(obj.bgColor);} ???????????if(obj.progressColor){init.setProgressColor(obj.progressColor);} ???????????if(obj.ballColor){init.setBallColor(obj.ballColor);} ???????????if(obj.beginColor){init.setBeginColor(obj.beginColor);} ???????????if(obj.finishColor){init.setFinishColor(obj.finishColor);} ???????}, ???????‘getCurTime‘:function(){ ???????????return init.curTime; ???????}, ???????‘getCurWidth‘:function(){ ???????????return init.curWidth; ???????} ???}})(jQuery,document);
首次写jquery插件,还有很大值得改进的地方~~
基于Jquery的音乐播放器进度条插件
原文地址:https://www.cnblogs.com/Hope-li/p/8379927.html