jQuery开发仿QQ版音乐播放器


Posted in jQuery onJuly 10, 2020

本文通过Html+CSS+jQuery开发仿QQ版的音乐播放器,是前端技术的综合应用,所用素材来源于网络,仅供学习分享使用,如有不足之处,还请指正。

涉及知识点

在本例中用到的知识点如下,按jQuery和CSS进行区分:

jQuery 是一个 JavaScript 库, 极大地简化了 JavaScript 编程,常见知识点如下:

  1. 通过标签获取jQuery对象:var $audio =$("audio");
  2. 通过选择符获取jQuery对象并设置文本内容:$(".music_progrss_time").text(timeStr);
  3. 通过选择符,标签名获取对象并获取第i个子元素:$(".song_lyric ul li").eq(index);
  4. 通过ajax异步获取数据并刷新页面:$.ajax({});
  5. 通过类选择符获取元素并进行隐藏或显示:$(this).find(".list_menu").stop().fadeIn(100);
  6. 通过委托动态设置单击事件,主要针对动态生成元素:$(".content_list").delegate(".list_check", "click", function() {});
  7. 通过addClass添加类,removeClass删除类,toggleClass切换类,hasClass是否包含类
  8. 获取与对象同级的兄弟节点:$musicList.siblings();
  9. 触发相关事件:$(".music_next").trigger("click");

CSS通过使用 CSS 我们可以大大提升网页开发的工作效率!本例使用知识点如下:

  1. 设置距离左边的距离:margin-left: 20px; 设置距离右边的距离:margin-right: 20px;
  2. 设置透明度:opacity: 0.6; 值[0,1]从透明到全不透明
  3. 设置背景图片:background: url(../img/player_logo.png) no-repeat 0 0;设置背景颜色和透明度:background: rgba(255,255,255,0.5);
  4. 设置li的样式:list-style: none;
  5. 设置显示样式为行内块:display: inline-block;
  6. 设置圆角:border-radius: 5px;
  7. 设置相对位置:position: relative;
  8. 背景图片的起始坐标:background-position: 0 -75px;

示例效果图及结构划分

本例的示例效果图及结构划分如下所示:

jQuery开发仿QQ版音乐播放器

Html核心代码

Header部分代码:主要用于显示logo和登录显示,如下所示:

<div class="header">
 <h1 class="logo">
 <a href="#" rel="external nofollow" ></a> --by Alan.hsiang
 </h1>
 <ul class="register">
 <li>登录</li>
 <li>设置</li>
 </ul>
</div>

中间区域部分:主要包括坐边的列表和右边的歌曲相关,如下所示:

<div class="content">
 <div class="content_in">
  <div class="content_left">
  <div class="content_toolbar">
   <span><i></i>收藏</span>
   <span><i></i>添加到</span>
   <span><i></i>下载</span>
   <span><i></i>删除</span>
   <span><i></i>清空列表</span>
  </div>
  <div class="content_list">
   <ul>
   <li class="list_title">
    <div class="list_check"><i></i></div>
    <div class="list_number"></div>
    <div class="list_name">歌曲</div>
    <div class="list_singer">歌手</div>
    <div class="list_time">时长</div>
   </li>
   </ul>
  </div>
  </div>
  <div class="content_right">
  <div class="song_info">
   <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="song_info_pic">
   <img src="" alt="" />
   </a>
   <div class="song_info_name">歌曲名称:<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class=""></a></div>
   <div class="song_info_singer">歌手名:<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class=""></a></div>
   <div class="song_info_album">专辑名称:<a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class=""></a></div>
  </div>
  <div class="song_lyric"><ul></ul></div>
  </div>
 </div>
 </div>

底部区域代码,主要用于播放相关内容,如下所示:

<div class="footer">
 <div class="footer_in">
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_pre" title="上一首"></a>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_play" title="播放"></a>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_next" title="下一首"></a>
  <div class="music_progress_info">
  <div class="music_progress_top">
   <span class="music_progrss_name"></span>
   <span class="music_progrss_time"></span>
  </div>
  <div class="music_progress_bar">
   <div class="music_progress_line">
   <div class="music_progress_dot"></div>
   </div>
  </div>
  </div>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_mode" title="播放模式"></a>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_fav" title="收藏"></a>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_down" title="下载"></a>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_comment" title="评论"></a>
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_only" title="纯净模式"></a>
  <div class="music_voice">
  <a href="javascript:;" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" class="music_voice_info" title="声音"></a>
  <div class="music_voice_bar">
   <div class="music_voice_line">
   <div class="music_voice_dot"></div>
   </div>
  </div>
  </div>
 </div>
 </div>

jQuery功能性核心代码

在本示例中,从功能上区分,主要分为播放模块,进度条模块,歌词模块,各个模块相互独立,所以进行了适当的封装。

播放模块【Play】主要包括歌曲的初始化,播放与暂停,上一首,下一首,播放同步,跳转等功能,核心代码如下:

(function(window){
 function Player($audio){
 return new Player.prototype.init($audio);
 }
 Player.prototype={
 constructor :Player,
 musicList:[],
 currIndex:-1,
 $audio:null,
 audio:null,
 init:function($audio){
  this.$audio=$audio;//jQuey包装对象
  this.audio=$audio.get(0);//原生audio对象
 },
 play:function(index,music){
  console.log(index,music);
  console.log(this.$audio);
  if(this.currIndex==index){
  //同一首音乐,则是暂停,播放之间切换

  if(this.audio.paused){
   this.audio.play();
  }else{
   this.audio.pause();
  }
  }else{
  //不是同一首,重新播放
  this.$audio.attr('src',music.link_url);
  this.audio.play();
  this.currIndex=index;
  }
 },
 preIndex:function(){
  var index=this.currIndex-1;
  if(index<0){
  index=this.musicList.length-1;
  }
  return index;
 },
 nextIndex:function(){
  var index=this.currIndex+1;
  if(index>this.musicList.length-1){
  index=0;
  }
  return index;
 },
 del:function(index){
  this.musicList.splice(index,1);
  if(index<this.currIndex){
  this.currIndex=this.currIndex-1;
  }
 },
 musicTimeUpdate:function(callBack){
  //需要一个回调函数作为参数
  var that=this;
  //监听audio播放事件
  this.$audio.on("timeupdate",function(){
  var duration=that.audio.duration;
  var currentTime=that.audio.currentTime;
  var timeStr=that.formatTime(currentTime,duration);
  //参数是一个回调函数
  callBack(duration,currentTime,timeStr);
  });
 },
 //定义一个格式化时间的方法
 formatTime:function (currentTime,duration){
  //总时长
  var endMin=parseInt(duration/60);
  var endSec=parseInt(duration%60);
  endMin=endMin<10?"0"+endMin:endMin;
  endSec=endSec<10?"0"+endSec:endSec;
  //当前时长
  var curMin=parseInt(currentTime/60);
  var curSec=parseInt(currentTime%60);
  curMin=curMin<10?"0"+curMin:curMin;
  curSec=curSec<10?"0"+curSec:curSec;
  return curMin+":"+curSec+" / "+endMin+":"+endSec;
 },
 musicSeekTo:function(value){
  var that=this;
  var duration=that.audio.duration;
  if(isNaN(duration))return;
  if(isNaN(value))return;
  that.audio.currentTime=duration*value ;
 },
 musicVoiceSeekTo:function(value){
  if(isNaN(value))return;
  if(value<=0 || value>=1) return;
  this.audio.volume=value;
 }
 };
 Player.prototype.init.prototype=Player.prototype;
 window.Player=Player;
})(window);

歌词模块【lyric】,主要包括歌词的加载,解析,同步等功能,核心代码如下:

(function(window){
 function Lyric(path){
 return new Lyric.prototype.init(path);
 }
 Lyric.prototype={
 constructor :Lyric,
 times:[],
 lyrics:[],
 index:-1,
 init:function(path){
  this.path=path;
 },
 loadLyric:function(callBack){
  var that=this;
  $.ajax({
  type: "get",
  dataType:"text",
  contentType: "application/text; charset=utf-8",
  url: that.path,
  success: function(data) {
   //console.log(data);
   that.parseLyric(data);
   callBack();
  },
  error: function(e) {
   console.log(e);
  }
  });
 },
 parseLyric:function(data){
  var that=this;
  //初始化歌词和时间
  that.times=[];
  that.lyrics=[];
  that.index=-1;
  //
  var array=data.split("\n");
  //console.log(array);
  var timeReg=/\[(\d*:\d*\.\d*)\]/;
  $.each(array, function(index,ele) {
  //console.log(ele);
  //
  var lyc=ele.split("]")[1];
  if(lyc==null || lyc.length==1){
   return true;//排除空字符串
  }
  that.lyrics.push(lyc);

  var res=timeReg.exec(ele);
  //console.log(res);
  if(res==null){
   return true; //排除空时间
  }
  var timeStr=res[1];
  var res2=timeStr.split(":");
  var min=parseInt(res2[0]) *60;
  var sec=parseFloat(res2[1]) ;
  var res3=parseFloat( Number(min+sec).toFixed(2));
  //console.log(res3);
  that.times.push(res3);
  });
  console.log(that.times.length +" , "+ that.lyrics.length);
 },
 currentLyric:function(currentTime){
  //console.log(currentTime);
  if(currentTime>this.times[0]){
  this.index++;
  this.times.shift();//删除第一个元素,并返回剩余的数组
  }
  return this.index;
 }
 };
 Lyric.prototype.init.prototype=Lyric.prototype;
 window.Lyric=Lyric;
})(window);

进度条模块【Progress】主要包括:进度条的初始化,单击,拖动,回调等功能,核心代码如下:

(function(window){
 function Progress($progressBar,$progressLine,$progressDot){
 return new Progress.prototype.init($progressBar,$progressLine,$progressDot);
 }
 Progress.prototype={
 constructor :Progress,
 isMove:false,
 init:function($progressBar,$progressLine,$progressDot){
  this.$progressBar=$progressBar;
  this.$progressLine=$progressLine;
  this.$progressDot=$progressDot;
 },
 progressClick:function(callBack){
  //console.log(this.$progressBar);
  var that=this;//此时的this表示Progress
  this.$progressBar.click(function(event){
  //此时的this表示progrssBar点击的对象
  var normalLeft = $(this).offset().left;//控件默认距左边的位置
  var eventLeft = event.pageX;//当前鼠标点击的距左边的位置
  that.$progressLine.css("width",eventLeft-normalLeft);
  that.$progressDot.css("left",eventLeft-normalLeft);
  //计算进度条的比例
  var value=(eventLeft-normalLeft)/$(this).width();
  callBack(value);
  });
 },
 progressMove:function(callBack){
  var that=this;//此时的this表示Progress
  var normalLeft =-1;
  var eventLeft=-1;
  var barWidth=this.$progressBar.width();
  this.$progressBar.mousedown(function(){
  that.isMove=true;
  normalLeft = $(this).offset().left;//控件默认距左边的位置

  $(document).mousemove(function(){
   //此时的this表示progrssBar点击的对象
   eventLeft = event.pageX;//当前鼠标点击的距左边的位置
   var v=eventLeft-normalLeft;
   if(v>=0 && v<=barWidth){
   //判断值的有效范围再赋值
   that.$progressLine.css("width",eventLeft-normalLeft);
   that.$progressDot.css("left",eventLeft-normalLeft);
   }
  });
  });
  $(document).mouseup(function(){
  $(document).off("mousemove");
  that.isMove=false;
  //计算进度条的比例
  var value=(eventLeft-normalLeft)/that.$progressBar.width();
  //鼠标抬起时触发,防止音乐断断续续
  callBack(value);
  });
 },
 setProgress:function(value){
  if(this.isMove)return;
  if(value<0 || value>100){
  return;
  }
  this.$progressLine.css("width",value+"%");
  this.$progressDot.css("left",value+"%");
 }
 };
 Progress.prototype.init.prototype=Progress.prototype;
 window.Progress=Progress;
})(window);

加载流程,包括初始化歌曲列表,歌词信息,注册事件,初始化进度条等功能,本例中的歌曲列表和歌词信息,均是通过ajax从本地文件中获取,核心代码如下:

$(function() {
 var $audio =$("audio");
 var player=new Player($audio);
 var progress=null;
 var voiceProgress=null;
 var lyric=null;
 //1.加载音乐
 getPlayerList();
 //2.注册事件
 initEvent();
 //3.初始化进度条,包括声音
 initProgress();

 //音乐播放同步
 player.musicTimeUpdate(function(duration,currentTime,timeStr){
 //同步时间
 $(".music_progrss_time").text(timeStr);
 //同步进度条
 var value=currentTime/duration *100;
 progress.setProgress(value);
 //实现歌词同步
 var oldIndex=lyric.index;
 var index=lyric.currentLyric(currentTime);
 if(oldIndex==index)return;
 var item=$(".song_lyric ul li").eq(index);
 item.addClass("cur");
 item.siblings().removeClass("cur");
 if(index<0) return;
 $(".song_lyric ul").css({
  marginTop:(-index+2)*40
 });
 })

 //获取列表函数
 function getPlayerList() {
 $.ajax({
  type: "get",
  url: "music_list.json",
  success: function(data) {
  //player.musicList=data;
  //console.log(data);
  var musicList = $(".content_list ul");
  $.each(data, function(index, ele) {
   var item = createMusicItem(index, ele);
   musicList.append(item);
  });
  //默认初始化第一首歌曲信息
  initMusicInfo(data[0]);

  //初始化歌词信息
  initMusicLyric(data[0]);
  },
  error: function(e) {
  console.log(e);
  }
 });
 }
 //定义一个方法,创建一条音乐
 function createMusicItem(index, music) {
 var $item = $("<li class=\"list_music\">\n" +
  "<div class=\"list_check\">\n" +
  "<i></i>\n" +
  "</div>\n" +
  "<div class=\"list_number\">\n" +
  (index + 1) +
  "</div>\n" +
  "<div class=\"list_name\">\n" +
  music.name +
  "<div class=\"list_menu\">\n" +
  "<a href=\"javascript:;\" title=\"播放\" class=\"list_menu_play\"></a>\n" +
  "<a href=\"javascript:\;\" title=\"添加\"></a>\n" +
  "<a href=\"javascript:;\" title=\"下载\"></a>\n" +
  "<a href=\"javascript:;\" title=\"分享\"></a>\n" +
  "</div>\n" +
  "</div>\n" +
  "<div class=\"list_singer\">\n" +
  music.singer +
  "</div>\n" +
  "<div class=\"list_time\">\n" +
  "<span>\n" +
  music.time +
  "</span>\n" +
  "<a href=\"javascript:;\" title=\"删除\" class=\"list_menu_del\"></a>\n" +
  "</div>\n" +
  "</li>");
 $item.get(0).index=index;
 $item.get(0).music=music;
 return $item;
 }

 //初始化音乐信息
 function initMusicInfo(music){
 //获取元素
 var $musicImg=$(".song_info_pic img");
 var $musicName=$(".song_info_name a");
 var $musicSinger=$(".song_info_singer a");
 var $musicAlbum=$(".song_info_album a");
 var $musicTopName=$(".music_progrss_name");
 var $musicTopTime=$(".music_progrss_time");
 var $musicBg=$(".mask_bg");
 //赋值
 $musicImg.attr("src",music.cover);
 $musicName.text(music.name);
 $musicSinger.text(music.singer);
 $musicAlbum.text(music.album);
 $musicTopName.text(music.name+" / "+ music.singer);
 $musicTopTime.text("00:00 / "+music.time);
 $musicBg.css("background","url('"+music.cover+"') no-repeat 0 0;");

 }

 //初始化歌词信息
 function initMusicLyric(music){
 lyric=new Lyric(music.link_lrc);
 var lyricContainer=$(".song_lyric ul");
 //清空信息
 lyricContainer.html("");
 //加载歌词
 lyric.loadLyric(function(){
  //加载完成后处理函数
  $.each(lyric.lyrics,function(index,ele){
  var item=$("<li>"+ele+"</li>");
  lyricContainer.append(item);
  });
 });
 }
 //注册事件
 function initEvent() {
 //监听歌曲的移入移出事件
 //通过委托动态监听事件
 $(".content_list").delegate(".list_music", "mouseover", function() {
  //移入事件:1.显示子菜单 2. 隐藏时长 ,显示删除按钮
  $(this).find(".list_menu").stop().fadeIn(100);
  $(this).find(".list_time a").stop().fadeIn(100);
  $(this).find(".list_time span").stop().fadeOut(100);
  //
  $(this).find(".list_name").addClass("list_music_hover");
 });
 $(".content_list").delegate(".list_music", "mouseleave", function() {
  //移出事件:1.隐藏子菜单 2. 显示时长 ,隐藏删除按钮
  $(this).find(".list_menu").stop().fadeOut(100);
  $(this).find(".list_time a").stop().fadeOut(100);
  $(this).find(".list_time span").stop().fadeIn(100);
  $(this).find(".list_name").removeClass("list_music_hover");
 });

 //以下绑定事件只针对静态语句
 // $(".list_music").hover(function(){
 // //移入事件:1.显示子菜单 2. 隐藏时长 ,显示删除按钮
 // $(this).find(".list_menu").stop().fadeIn(100);
 // $(this).find(".list_time a").stop().fadeIn(100);
 // $(this).find(".list_time span").stop().fadeOut(100);
 // },function(){
 // //移出事件:1.隐藏子菜单 2. 显示时长 ,隐藏删除按钮
 // $(this).find(".list_menu").stop().fadeOut(100);
 // $(this).find(".list_time a").stop().fadeOut(100);
 // $(this).find(".list_time span").stop().fadeIn(100);
 // });

 $(".content_list").delegate(".list_check", "click", function() {
  $(this).toggleClass("list_checked");
  var musicList = $(this).parents(".list_music");
  if($(this).hasClass("list_checked")) {
  musicList.find("div").css("color", "#fff");
  musicList.siblings().find("div").css("color", "rgba(255,255,255,0.5)");
  } else {
  musicList.find("div").css("color", "rgba(255,255,255,0.5)");
  }
 });
 // //监听复选框的点击事件
 // $(".list_check").click(function(){
 // $(this).toggleClass("list_checked");
 // });

 //监听点击播放事件
 $(".content_list").delegate(".list_menu_play", "click", function() {
  //切换播放图标
  $(this).toggleClass("list_menu_play2");
  //还原其他项的图标
  var $musicList = $(this).parents(".list_music");

//  console.log($musicList.get(0).index);
//  console.log($musicList.get(0).music);

  $musicList.siblings().find(".list_menu_play").removeClass("list_menu_play2");
  //底部图标同步
  if($(this).hasClass("list_menu_play2")) {
  $(".music_play").addClass("music_pause");
  $musicList.find("div").css("color", "#fff");
  $musicList.siblings().find("div").css("color", "rgba(255,255,255,0.5)");
  } else {
  $(".music_play").removeClass("music_pause");
  $musicList.find("div").css("color", "rgba(255,255,255,0.5)");
  }
  $musicList.find(".list_number").toggleClass("list_number_play");
  $musicList.siblings().find(".list_number").removeClass("list_number_play");
  //播放
  player.play($musicList.get(0).index,$musicList.get(0).music);
  //
  initMusicInfo($musicList.get(0).music);
  //同步歌词
  initMusicLyric($musicList.get(0).music);
 });

 //监听删除事件
 $(".content_list").delegate(".list_menu_del", "click", function() {
  var $item=$(this).parents(".list_music");
  $item.remove();
  player.del($item.get(0).index);
  if($item.get(0).index==player.currIndex){
  //如果删除的是当前播放的歌曲,则自动播放下一首
  $(".music_next").trigger("click");
  }
  //修改序号
  $(".list_music").each(function(index,ele){
  ele.index=index;
  $(ele).find(".list_number").text(index+1);
  });
 });
 //监听底部按钮
 //播放
 $(".music_play").click(function(){
  //判断是否有播放过音乐
  if(player.currIndex==-1){
  //表示没有播放过
  $(".list_music").eq(0).find(".list_menu_play").trigger("click");

  }else{
  //表示之前有播放过
  $(".list_music").eq(player.currIndex).find(".list_menu_play").trigger("click");
  }
 });
 //前一首
 $(".music_pre").click(function(){
  $(".list_music").eq(player.preIndex()).find(".list_menu_play").trigger("click");
 });
 //下一首
 $(".music_next").click(function(){
  $(".list_music").eq(player.nextIndex()).find(".list_menu_play").trigger("click");
 });
 //声音事件
 $(".music_voice_info").click(function(){
  //图标切换
  $(this).toggleClass("music_voice_info2");
  if($(this).hasClass("music_voice_info2")){
  //无声音
  player.musicVoiceSeekTo(0);
  }else{
  //有声音
  player.musicVoiceSeekTo(1);
  }
 });
 }
 //初始化进度条
 function initProgress(){
 //进度条
 var $progressBar=$(".music_progress_bar");
 var $progressLine=$(".music_progress_line");
 var $progressDot=$(".music_progress_dot");
 progress=new Progress($progressBar,$progressLine,$progressDot);
 progress.progressClick(function(value){
  console.log("进度点0001");
  player.musicSeekTo(value);
 });
 progress.progressMove(function(value){
  player.musicSeekTo(value);
 });
 //声音条
 var $musicVoiceBar=$(".music_voice_bar");
 var $musicVoiceLine=$(".music_voice_line");
 var $musicVoiceDot=$(".music_voice_dot");
 voiceProgress=new Progress($musicVoiceBar,$musicVoiceLine,$musicVoiceDot);
 voiceProgress.progressClick(function(value){
  console.log("声音点0001");
  player.musicVoiceSeekTo(value);
 });
 voiceProgress.progressMove(function(value){
  player.musicVoiceSeekTo(value);
 });
 }

});

如果歌曲发生改变,则背景图也跟着改变,如下所示:

jQuery开发仿QQ版音乐播放器

以上就是jQuery开发仿QQ版音乐播放器的详细内容,更多关于jQuery开发音乐播放器的资料请关注三水点靠木其它相关文章!

jQuery 相关文章推荐
jquery实现静态搜索功能(可输入搜索文字)
Mar 28 jQuery
jQuery获取table下某一行某一列的值实现代码
Apr 07 jQuery
jquery中each循环的简单回滚操作
May 05 jQuery
jQuery实现可拖动进度条实例代码
Jun 21 jQuery
jQuery实现键盘回车搜索功能
Jul 25 jQuery
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
jQuery ajax仿Google自动提示SearchSuggess功能示例
Mar 28 jQuery
详解jquery和vue对比
Apr 16 jQuery
jQuery实现高级检索功能
May 28 jQuery
jQuery实现文本显示一段时间后隐藏的方法分析
Jun 20 jQuery
jquery实现掷骰子小游戏
Oct 24 jQuery
jQuery轮播图功能制作方法详解
Dec 03 jQuery
jQuery实现B2B网站后台管理系统侧导航
Jul 08 #jQuery
jQuery使用jsonp实现百度搜索的示例代码
Jul 08 #jQuery
jQuery 实现扁平式小清新导航
Jul 07 #jQuery
jQuery 动态粒子效果示例代码
Jul 07 #jQuery
jQuery实现简单飞机大战
Jul 05 #jQuery
jQuery实现简单日历效果
Jul 05 #jQuery
jQuery实现飞机大战小游戏
Jul 05 #jQuery
You might like
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
javascript indexOf函数使用说明
2008/07/03 Javascript
jQuery 使用个人心得
2009/02/26 Javascript
JavaScript定时器详解及实例
2013/08/01 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
jQuery实现页面顶部显示的进度条效果完整实例
2015/12/09 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
jQuery 局部div刷新和全局刷新方法总结
2016/10/05 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
jQuery实现的背景颜色渐变动画效果示例
2017/03/24 jQuery
Vue v2.4中新增的$attrs及$listeners属性使用教程
2018/01/08 Javascript
JS设计模式之观察者模式实现实时改变页面中金额数的方法
2018/02/05 Javascript
JavaScript闭包与作用域链实例分析
2019/01/21 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
Python中的迭代器漫谈
2015/02/03 Python
Python Matplotlib库入门指南
2015/05/18 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
Columbia美国官网:美国著名的户外服装品牌
2016/11/24 全球购物
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
简历里的自我评价
2014/01/31 职场文书
社区食品安全实施方案
2014/03/28 职场文书
企业人事任命书
2014/06/05 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server
win7配置本地ftp服务器的图文教程
2022/08/05 Servers