实例介绍
基于jQuery简单的音乐播放器、滑块
【实例截图】
【核心代码】
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>基于jQuery简单的音乐播放器、滑块-jq22.com</title>
<script src="http://libs.baidu.com/jquery/1.8.3/jquery.min.js"></script>
<style>
html {
height:100%;
}
body {
height:100%;
}
#player {
display:none;
}
.ss-player {
position:fixed;
left:0;
bottom:0;
margin:10px;
color:#FFF;
}
.ss-player.mini .ss-box {
width:100px;
height:100px;
border-radius:50%;
}
.ss-player.mini .pbcell:nth-child(2),.ss-player.mini .pbcell:nth-child(3) {
display:none;
}
.ss-box {
width:500px;
height:100px;
background-color:#000;
overflow:hidden;
display:table;
transition:0.5s;
}
.ss-player .btn-ctrl {
width:40px;
height:40px;
margin:10px;
cursor:pointer;
display:inline-block;
background-image:url(http://jq22.qiniudn.com/1gvzgu.svg);
background-size:100% 100%;
background-position:center center;
transition:0.5s;
}
.ss-player .btn-ctrl.pause {
background-image:url(http://jq22.qiniudn.com/44mnya.svg);
}
.ss-player .timelabel {
color:#FFF;
font-size:14px;
}
.ss-player .progressbar {
width:300px;
height:4px;
margin:auto;
display:inline-block;
border-radius:2px;
background-color:rgba(255,255,255,0.2);
position:relative;
}
.ss-player .currenttime {
width:0%;
height:100%;
background-color:#e60012;
border-radius:2px;
position:absolute;
text-align:right;
left:0;
top:0;
}
.ss-player .buffertime {
width:0%;
height:100%;
background-color:rgba(180,180,180,0.5);
border-radius:2px;
}
.ss-player .currenttime .btn-drag {
width:6px;
height:6px;
border-radius:50%;
background-color:#e60012;
border:2px solid #FFF;
display:inline-block;
position:absolute;
right:0px;
margin-right:-4px;
top:-2px;
cursor:pointer;
transition:0.3s;
}
.ss-player .currenttime .btn-drag:hover {
box-shadow:0 0 10px 0 rgba(255,255,255,1);
}
.ss-player .pbcell {
display:table-cell;
vertical-align:middle;
text-align:center;
}
.pbcell:nth-child(3) {
padding:0 10px;
}
</style>
</head>
<body>
<div class="ss-player">
<div class="ss-box">
<div class="pbcell">
<div class="btn-ctrl"></div>
</div>
<div class="pbcell">
<div class="progressbar">
<div class="currenttime"><i class="btn-drag"></i></div>
<div class="buffertime"></div>
</div>
</div>
<div class="pbcell">
<span class="timelabel">00:00/00:00</span>
</div>
</div>
<audio id="player" src="http://jq22.qiniudn.com/the.mp3" controls=""></audio>
</div>
<p style="border:1px solid #B3E4FF;background-color: aliceblue;padding: 20px;">
有时间做了一个播放器,做的过程中,要做拖动和滑块两个小功能,所以顺便一起演示给大家看。希望能帮到要学的人。
</p>
<h1>1、滑块演示</h1>
拖动我试试 :
<div class="ZZZ" style="width:400px;height: 20px; background-color:#F1F1F1;margin:50px 0;display: inline-block;vertical-align: middle;">
<div class="AAA" style="width: 0%;height: 100%;background-color:#44C2FF; text-align: center; "><span class="BBB"></span></div>
</div>
<h1>2、播放器演示</h1>
<p>浮动着呢,左下角哈。双击播放器会切成Mini模式啊</p>
<script>
$(function() {
function formatTime(seconds) {
var min = Math.floor(seconds / 60),
second = seconds % 60,
hour, newMin, time;
min = parseInt(min);
second = parseInt(second);
if (min > 60) {
hour = Math.floor(min / 60);
newMin = min % 60;
}
if (second < 10) {
second = '0' second;
}
if (min < 10) {
min = '0' min;
}
return time = hour ? (hour ':' newMin ':' second) : (min ':' second);
}
$('body').on('dragstart', '.ss-player', function() {
return false;
});
function ssplayer() {
var ssplayer = $('#player')[0];
ssplayer.ontimeupdate = function() {
//console.log(ssplayer.currentTime '/' ssplayer.duration);
var duration = ssplayer.duration;
var currentTime = ssplayer.currentTime;
var p = currentTime / duration * 100;
var dlen = formatTime(duration);
var clen = formatTime(currentTime);
var bfp = ssplayer.buffered.end(0) / duration * 100;
//console.log(dlen '/' clen);
$('.ss-player .timelabel').html(clen '/' dlen);
$('.ss-player .currenttime').stop(false, true).css({
width: p '%'
});
$('.ss-player .buffertime').stop(false, true).css({
width: bfp '%'
});
}
ssplayer.onended = function() {
$('.ss-player .btn-ctrl').removeClass('pause');
}
ssplayer.onprogress = function() {
}
return $('#player')[0];
}
$('body').on('dblclick', '.ss-player', function() {
$(this).toggleClass('mini');
});
var player = ssplayer();
$('body').on('click', '.ss-player .btn-ctrl', function(e) {
if (player.paused) {
player.play();
$('.ss-player .btn-ctrl').removeClass('pause').addClass('pause');
} else {
player.pause();
$('.ss-player .btn-ctrl').removeClass('pause');
}
e.stopPropagation();
});
//拖动
$.fn.extend({
initDrag: function(options) {
var defaults = {
range: false, //可拖动范围元素对象
sx: true, //是否可横向拖动
sy: true, //是否可纵向拖动
slider: false, //是否为滑块模式,是则为对象
sliding: function() {}, //滑动滑块时的回调函数
bans: false //禁用哪些内部对象拖动
}
var opts = $.extend(defaults, options);
var _this = $(this);
_this.isDragStart = false; //是否拖动模式
_this.dragStartX = null; //起始坐标X
_this.dragStartY = null; //起始坐标Y
_this.mousedown(function(e) {
_this.isDragStart = true; //标记为手动模式
_this.dragStartX = e.pageX - _this.offset().left; //对象起始位置相对坐标X
_this.dragStartY = e.pageY - _this.offset().top; //对象起始位置相对坐标Y
if ($(document).setCapture) {
$(document).setCapture();
}
//滑块模式(当点击范围滑动和点击处)
if (opts.slider !== false) {
var x = e.pageX - opts.slider.offset().left;
var y = e.pageY - opts.slider.offset().top;
var ww = opts.range.width();
var hh = opts.range.height();
if (x > ww) {
x = ww;
}
if (y > hh) {
y = hh;
}
if (opts.sx) {
opts.slider.css('width', x 'px');
opts.sliding(x / ww);
}
if (opts.sy) {
opts.slider.css('height', y 'px');
opts.sliding(y / hh);
}
}
e.stopPropagation();
});
//禁用哪些内部元素拖动
if (opts.bans !== false) {
opts.bans.each(function() {
$(this).mousedown(function(e) {
e.stopPropagation();
});
});
}
//拖动时
$(document).mousemove(function(e) {
if (!_this.isDragStart) {
return false;
}
if (opts.slider !== false) {
x = e.pageX - opts.slider.offset().left;
y = e.pageY - opts.slider.offset().top;
} else {
var x = e.pageX - _this.dragStartX - _this.css('margin-left').replace('px', '');
var y = e.pageY - _this.dragStartY - _this.css('margin-top').replace('px', '');
}
//是否启用拖动范围
if (opts.range !== false) {
var ww = opts.range.width();
var hh = opts.range.height();
var zw = _this.outerWidth(true);
var zh = _this.outerHeight(true);
if (x < 0) {
x = 0;
}
if (y < 0) {
y = 0;
}
if (opts.slider !== false) {
if (x > ww) {
x = ww;
}
if (y > hh) {
y = hh;
}
} else {
if (x > ww - zw) {
x = ww - zw;
}
if (y > hh - zh) {
y = hh - zh;
}
}
}
//是否滑块模式,拖动模式
if (opts.slider !== false) {
if (opts.sx) {
opts.slider.css('width', x 'px');
opts.sliding(x / ww);
}
if (opts.sy) {
opts.slider.css('height', y 'px');
opts.sliding(y / hh);
}
} else {
if (opts.sx) {
_this.css('left', x 'px').css('right', 'auto');
}
if (opts.sy) {
_this.css('top', y 'px').css('bottom', 'auto');
}
}
});
$(document).mouseup(function() {
if ($(this).releaseCapture) {
$(this).releaseCapture();
}
_this.isDragStart = false;
});
}
});
$('.ss-player .btn-drag,.ss-player .progressbar').initDrag({
slider: $('.ss-player .currenttime'),
sy: false,
range: $('.ss-player .progressbar'),
sliding: function(p) {
var s = p * player.duration;
player.currentTime = s;
}
});
$('.ss-player').initDrag({
range: $('body'),
bans: $('.ss-player .progressbar,.ss-player .btn-ctrl')
});
$('.ZZZ').initDrag({
slider: $('.AAA'),
sy: false,
range: $('.ZZZ'),
sliding: function(p) {
$('.BBB').html(Math.round(p * 100) '%');
}
});
});
</script>
</body>
</html>
标签: 控件
相关软件
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论