基于Jquery的音乐播放器进度条插件

  自己基于豆瓣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插件,还有很大值得改进的地方~~

  

原文地址:https://www.cnblogs.com/Hope-li/p/8379927.html

时间: 2024-12-13 02:52:39

基于Jquery的音乐播放器进度条插件的相关文章

基于Service的音乐播放器

这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activity的界面按钮或拖动进度条时,系统通过发送广播通知后台Service来改变播放状态和播放指定音乐. 程序运行效果图:         程序代码: 程序界面类(MusicBox.java): package com.jph.musicbox; import com.jph.util.ConstUtil;

毕业设计——基于STM32的音乐播放器设计(一)

基于STM32的音乐播放器设计, 源代码下载地址:http://download.csdn.net/detail/cxp2205455256/8334021      SD卡文件下载地址:http://download.csdn.net/detail/cxp2205455256/8334089 电路图下载地址:文件太大了,上传不了....... 以下是截图: 1.硬件电路 2.软件主界面 3.音乐播放器界面 4.音乐定时播放界面 5.音乐列表界面 6.日历功能界面 9.温度功能界面 10.计算器

Android基于发展Service音乐播放器

这是一个基于Service组件的音乐播放器,程序的音乐将会由后台的Service组件负责播放,当后台的播放状态改变时,程序将会通过发送广播通知前台Activity更新界面:当用户单击前台Activity的界面button或拖动进度条时,系统通过发送广播通知后台Service来改变播放状态和播放指定音乐. 程序执行效果图:         watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZmVuZ3l1emhlbmdmYW4=/font/5a6L5L2T/

基于AVPlayer的音乐播放器

1,最近写了一个关于音乐播放器的demo,查阅资料的过程中,学会不少新东西.简单记录一下写的过程中遇到问题,备忘. 2,为了方便使用,将播放器写成单例  .h 先导入需要的库 #import <AudioToolbox/AudioToolbox.h> #import <AVFoundation/AVFoundation.h> #import <objc/runtime.h> 生成一个播放器的实例 @property (nonatomic,strong) AVPlayer

QT5:C++实现基于Multimedia的音乐播放器(序)

前段时间C++课设,决定做个播放器,于是参考了网上的代码后,做了个很简陋的音乐播放器(只写了MP3格式)出来,虽然功能甚少,但还是决定把过程记录一下. 成品如下图: 播放器功能: 上.下一首,音量控制 单曲和列表循环.随机播放模式 添加歌曲(因为懒,连删除歌曲都没写) 所用技术:QT5,C++. 整个程序继承QT的QWidget完成,界面用qss修饰(qss的语法和CSS几乎一模一样),整个播放器主要靠QT的multimedia来完成音乐解码和播放.QMediaplayer用于解析音频文件,QM

QT5:C++实现基于multimedia的音乐播放器(二)

今天接着上一篇来实现播放器的槽函数. 先来实现播放模式,槽函数如下: 1 //播放模式 2 void Music::musicPlayPattern() 3 { 4 5 //z=++z%3; 6 if(z==0) 7 { 8 //顺序播放 9 playPattern->setStyleSheet("QPushButton:!hover{border-image: url(:/image/Seq.png);}" 10 "QPushButton:hover{border-i

jQuery简单实用的轻量级进度条插件

jQMeter是一款简单实用的轻量级进度条jQuery插件,它可以显示为水平或垂直进度条,进度条加载时带有动画特效,你只需要简单的传入一些参数到jQMeter对象的构造函数中就可以完成你想要的进度条效果. 该进度条插件的构造函数中允许你定义进度条的宽度.高度.背景色.进度条颜色等等参数,通过这些参数你可以构造自己的进度条样式. 效果演示:http://www.htmleaf.com/Demo/201504131672.html 下载地址:http://www.htmleaf.com/jQuery

QT5:C++实现基于multimedia的音乐播放器(一)

上一篇里简略的描述了一下播放器的实现,这一篇开始具体描述一下过程. 环境配置:Qt Creator 打开Qt Creator,创建一个new project,项目名称随你喜欢(我的是MusicPlayer),类名也随你喜欢(我的是Music),基类选择QWidget,不勾选界面UI(你也可以勾选UI,用QT自带的UI设计来创建界面),然后要记住项目保存路径不能有中文. 创建成功后,在MusicPlayer.pro(项目名称.pro)里加上"QT += multimedia"这一句: 1

html网页音乐播放器自带播放列表

基于网页的音乐播放器demo  http://pan.baidu.com/s/1dDgm7HR 自己diy了一个手机端在线音乐播放器演示地址http://shanxi2014.com/zhuandizhi/dom.php 全面支持手机端浏览器. 主要修改引用路径(不要修改文件相对存放地址) 第二就是正则拼接参数了 <script src="/city/js/libs/jquery-1.10.2.min.js"></script> <script src=&