用jquery写一个属于自己的音乐播放器

看到一个用css3实现的CD的动画,演示在这儿http://codepen.io/_kieran/pen/QNRmep

突然那我就想说给自己做一个音乐播放器吧,说做就做。演示在https://echolsx.github.io/music/

Github传送门:https://github.com/EchoLsx/music

图片描述

主要代码:

<div id="background"></div>
<div id="player">

<div class="cover"></div>
<div class="ctrl"><div class="tag"><strong>Title</strong><span class="artist">Artist</span><span class="album">Album</span></div><div class="control"><div class="left"><div class="rewind icon"></div><div class="playback icon"></div><div class="fastforward icon"></div></div><div class="volume right"><div class="mute icon left"></div><div class="slider left"><div class="pace"></div></div></div></div><div class="progress"><div class="slider"><div class="loaded"></div><div class="pace"></div></div><div class="timer left">0:00</div><div class="right"><div class="repeat icon"></div><div class="shuffle icon"></div></div></div></div>
</div>
<ul id="playlist"></ul>

JS部分:

   (function($){// Settingsvar repeat = localStorage.repeat || 0,shuffle = localStorage.shuffle || 'false',continous = true,autoplay = true,playlist = [{title: 'Lost Stars',artist: 'Adam Levine',album: 'Begin Again (Music From and Inspired By the Original Motion Picture)',cover:'img/1.jpg',mp3: 'mp3/Adam Levine - Lost Stars.mp3',ogg: ''},{title: 'Color Blind',artist: 'Matt B',album: 'LOVE AND WAR',cover: 'img/8.jpg',mp3: 'mp3/Matt B - Color Blind.mp3',ogg: ''},];// Load playlistfor (var i=0; i<playlist.length; i++){var item = playlist[i];$('#playlist').append('<li>'+item.artist+' - '+item.title+'</li>');}var time = new Date(),currentTrack = shuffle === 'true' ? time.getTime() % playlist.length : 0,trigger = false,audio, timeout, isPlaying, playCounts;var play = function(){audio.play();$('.playback').addClass('playing');timeout = setInterval(updateProgress, 500);isPlaying = true;}var pause = function(){audio.pause();$('.playback').removeClass('playing');clearInterval(updateProgress);isPlaying = false;}// Update progressvar setProgress = function(value){var currentSec = parseInt(value%60) < 10 ? '0' + parseInt(value%60) : parseInt(value%60),ratio = value / audio.duration * 100;$('.timer').html(parseInt(value/60)+':'+currentSec);$('.progress .pace').css('width', ratio + '%');$('.progress .slider a').css('left', ratio + '%');}var updateProgress = function(){setProgress(audio.currentTime);}// Progress slider$('.progress .slider').slider({step: 0.1, slide: function(event, ui){$(this).addClass('enable');setProgress(audio.duration * ui.value / 100);clearInterval(timeout);}, stop: function(event, ui){audio.currentTime = audio.duration * ui.value / 100;$(this).removeClass('enable');timeout = setInterval(updateProgress, 500);}});// Volume slidervar setVolume = function(value){audio.volume = localStorage.volume = value;$('.volume .pace').css('width', value * 100 + '%');$('.volume .slider a').css('left', value * 100 + '%');}var volume = localStorage.volume || 0.5;$('.volume .slider').slider({max: 1, min: 0, step: 0.01, value: volume, slide: function(event, ui){setVolume(ui.value);$(this).addClass('enable');$('.mute').removeClass('enable');}, stop: function(){$(this).removeClass('enable');}}).children('.pace').css('width', volume * 100 + '%');$('.mute').click(function(){if ($(this).hasClass('enable')){setVolume($(this).data('volume'));$(this).removeClass('enable');} else {$(this).data('volume', audio.volume).addClass('enable');setVolume(0);}});// Switch trackvar switchTrack = function(i){if (i < 0){track = currentTrack = playlist.length - 1;} else if (i >= playlist.length){track = currentTrack = 0;} else {track = i;}$('audio').remove();loadMusic(track);if (isPlaying == true) play();}// Shuffle
var shufflePlay = function(){var time = new Date(),lastTrack = currentTrack;currentTrack = time.getTime() % playlist.length;if (lastTrack == currentTrack) ++currentTrack;switchTrack(currentTrack);
}// Fire when track ended
var ended = function(){pause();audio.currentTime = 0;playCounts++;if (continous == true) isPlaying = true;if (repeat == 1){play();} else {if (shuffle === 'true'){shufflePlay();} else {if (repeat == 2){switchTrack(++currentTrack);} else {if (currentTrack < playlist.length) switchTrack(++currentTrack);}}}
}var beforeLoad = function(){var endVal = this.seekable && this.seekable.length ? this.seekable.end(0) : 0;$('.progress .loaded').css('width', (100 / (this.duration || 1) * endVal) +'%');
}// Fire when track loaded completely
var afterLoad = function(){if (autoplay == true) play();
}// Load track
var loadMusic = function(i){var item = playlist[i],newaudio = $('<audio>').html('<source src="'+item.mp3+'"><source src="'+item.ogg+'">').appendTo('#player');$('.cover').html('<img src="'+item.cover+'" alt="'+item.album+'">');$('.tag').html('<strong>'+item.title+'</strong><span class="artist">'+item.artist+'</span><span class="album">'+item.album+'</span>');$('#playlist li').removeClass('playing').eq(i).addClass('playing');audio = newaudio[0];audio.volume = $('.mute').hasClass('enable') ? 0 : volume;audio.addEventListener('progress', beforeLoad, false);audio.addEventListener('durationchange', beforeLoad, false);audio.addEventListener('canplay', afterLoad, false);audio.addEventListener('ended', ended, false);
}loadMusic(currentTrack);
$('.playback').on('click', function(){if ($(this).hasClass('playing')){pause();} else {play();}
});
$('.rewind').on('click', function(){if (shuffle === 'true'){shufflePlay();} else {switchTrack(--currentTrack);}
});
$('.fastforward').on('click', function(){if (shuffle === 'true'){shufflePlay();} else {switchTrack(++currentTrack);}
});
$('#playlist li').each(function(i){var _i = i;$(this).on('click', function(){switchTrack(_i);});
});if (shuffle === 'true') $('.shuffle').addClass('enable');
if (repeat == 1){$('.repeat').addClass('once');
} else if (repeat == 2){$('.repeat').addClass('all');
}$('.repeat').on('click', function(){if ($(this).hasClass('once')){repeat = localStorage.repeat = 2;$(this).removeClass('once').addClass('all');} else if ($(this).hasClass('all')){repeat = localStorage.repeat = 0;$(this).removeClass('all');} else {repeat = localStorage.repeat = 1;$(this).addClass('once');}
});$('.shuffle').on('click', function(){if ($(this).hasClass('enable')){shuffle = localStorage.shuffle = 'false';$(this).removeClass('enable');} else {shuffle = localStorage.shuffle = 'true';$(this).addClass('enable');}});
})(jQuery);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL 性能监控 4 大指标

【编者按】本文作者为 John Matson&#xff0c;主要介绍 mysql 性能监控应该关注的 4 大指标。 文章系国内 ITOM 管理平台 OneAPM 编译呈现。 MySQL 是什么&#xff1f; MySQL 是现而今最流行的开源关系型数据库服务器。由 Oracle 所有&#xff0c;MySQL 提供了可以免费下载的社…

【深度相机系列四】深度相机原理揭秘--结构光(iPhone X 齐刘海原理)

from&#xff1a;https://blog.csdn.net/electech6/article/details/78707839导读 结构光法&#xff1a;为解决双目匹配问题而生 深度图效果&#xff1a;结构光vs.双目 投射图案的编码方式直接编码时分复用编码空分复用编码 Kinect1原理 iPhone X原深感相机是缩小版的更强大的K…

Android倒计时工具类

为什么80%的码农都做不了架构师&#xff1f;>>> 原文地址:http://my.oschina.net/reone/blog/710003 多谢touch_ping 的回应. 原来api有这个类 android.os.CountDownTimer , 具体实现很下面的差不多. import android.content.Context; import android.os.Handler…

深度相机原理揭秘--双目立体视觉

欢迎关注计算机视觉life&#xff01;导读 为什么非得用双目相机才能得到深度&#xff1f; 双目立体视觉深度相机的工作流程 双目立体视觉深度相机详细工作原理理想双目相机成像模型极线约束图像矫正技术基于滑动窗口的图像匹配基于能量优化的图像匹配 双目立体视觉深度相机的优…

微信扫码支付模式一和模式二的区别

http://www.baidu.com/link?urlAj_xhOM5Q6rpZXkTMBPq4o0UbCO4eLq0esX8B3K2v06bkRS8F8lC4k06rv-3uZARLLTEKJHMhwzI_cdcJiHfqK&wd&eqid904bc71f000181740000000356d7d9bf https://www.zhihu.com/question/35818812/answer/66086727 知乎页面访问存在502 Bad Gateway问题…

双目视觉几何框架详解(玉米专栏8篇汇总)

一、图像坐标&#xff1a;我想和世界坐标谈谈(A) 玉米竭力用轻松具体的描述来讲述双目三维重建中的一些数学问题。希望这样的方式让大家以一个轻松的心态阅读玉米的《计算机视觉学习笔记》双目视觉数学架构系列博客。这个系列博客旨在捋顺一下已标定的双目视觉中的数学主线。数…

(原)Ubuntu14中安装GraphicsMagick

转载请注明出处&#xff1a; http://www.cnblogs.com/darkknightzh/p/5661439.html 参考网址&#xff1a; http://comments.gmane.org/gmane.comp.video.graphicsmagick.core/514 http://www.graphicsmagick.org/INSTALL-unix.html https://github.com/clementfarabet/graphics…

世界坐标系和相机坐标系,图像坐标系的关系

from&#xff1a;https://blog.csdn.net/waeceo/article/details/50580607一、四个坐标系简介和转换相机模型为以后一切标定算法的关键&#xff0c;只有这边有相当透彻的理解&#xff0c;对以后的标定算法才能有更好的理解。本人研究了好长时间&#xff0c;几乎每天都重复看几遍…

PythonOCC 3D图形库学习—创建立方体模型

Open CASCADE&#xff08;简称OCC&#xff09;平台是是一个开源的C类库&#xff0c;OCC主要用于开发二维和三维几何建模应用程序&#xff0c;包括通用的或专业的计算机辅助设计CAD系统、制造或分析领域的应用程序、仿真应用程序或图形演示工具。 PythonOCC是对Open CASCADE的封…

Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照...

2019独角兽企业重金招聘Python工程师标准>>> Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。 Servlet的性能应该是最好的&#xff0c;可以做为参考基准&#xff0c;其它测试都要向它看齐&#xff0c;参照它。 做为一个程序员&#xff0c;对于各个框架的性能要有…

基于图像分割的立体匹配方法

1.绪论 立体匹配是三维重建系统的关键步骤&#xff0c;并且作为一种非接触测量方法在工业以及科研领域具有重要的应用价值。为了完成匹配工作以及获取场景的稠密视差图&#xff0c;可以通过构建能量函数对应立体匹配的约束条件。复杂能量函数的全局最优解通常是NP难问题。相对于…

深度相机(二)--结构光深度测距

原文&#xff1a; http://blog.sina.com.cn/s/blog_80ce3a550100wg5j.html http://blog.csdn.net/u013360881/article/details/51395427 网上资源&#xff1a;http://eia.udg.es/~qsalvi/recerca.html 结构光编码&#xff1a; 在3D 的深度获取上&#xff0c;最为常见的方法是类…

用python实现模拟登录人人网

用python实现模拟登录人人网 字数4068 阅读1762 评论19 喜欢46我决定从头说起。懂的人可以快速略过前面理论看最后几张图。 web基础知识 从OSI参考模型&#xff08;从低到高&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0c;传输层&#xff0c;会话层&a…

双目相机--双目视差与深度距离关系推导详解

相机成像的模型如下图所示&#xff1a; P为空间中的点&#xff0c;P1和P2是点P在左右像平面上的成像点&#xff0c;f是焦距&#xff0c;OR和OT是左右相机的光心。由下图可见左右两个相机的光轴是平行的。XR和XT是两个成像点在左右两个像面上距离图像左边缘的距离。 -----------…

SQL Server有这些属性吗

2019独角兽企业重金招聘Python工程师标准>>> Navicat for SQL Server是一个全面的图形化方式管理数据库&#xff0c;可进行创建、编辑和删除全部数据库对象&#xff0c;例如表、视图、函数、索引和触发器&#xff0c;或运行SQL查询和脚本&#xff0c;查看或编辑BLOB…

【立体视觉】双目立体标定与立体校正

from&#xff1a;https://blog.csdn.net/u011574296/article/details/73826420 参考&#xff1a; 机器视觉学习笔记&#xff08;6&#xff09;——双目摄像机标定参数说明 机器视觉学习笔记&#xff08;8&#xff09;——基于OpenCV的Bouguet立体校正 双摄像头立体成像(三)-畸变…

bootstrap .col-md-6 文字居中问题处理

转载于:https://www.cnblogs.com/benbenfishfish/p/5672520.html

机器视觉学习笔记(4)——单目摄像机标定参数说明

from&#xff1a;https://blog.csdn.net/xuelabizp/article/details/50314633机器视觉学习笔记&#xff08;4&#xff09;——单目摄像机标定参数说明 标签&#xff1a; 机器视觉1.针孔摄像机模型 在介绍摄像机标定参数之前&#xff0c;需要先简单说一下针孔摄像机的原理。投影…

mysql 5.6 binlog组提交

mysql 5.6 binlog组提交实现原理http://blog.itpub.net/15480802/viewspace-1411356 Redo组提交 Redo提交流程大致如下 lock log->mutex write redo log buffer to disk unlock log->mutex fsync Fsync写磁盘耗时较长且不占用log->mutex&#xff0c;也就是其执行期间其…

张正友相机标定Opencv实现以及标定流程标定结果评价图像矫正流程解析(附标定程序和棋盘图)

from&#xff1a;https://blog.csdn.net/dcrmg/article/details/52939318使用Opencv实现张正友法相机标定之前&#xff0c;有几个问题事先要确认一下&#xff0c;那就是相机为什么需要标定&#xff0c;标定需要的输入和输出分别是哪些&#xff1f;相机标定的目的&#xff1a;获…