HTML5 Video player jQuery plugin
程序员文章站
2024-01-14 08:04:34
player.css player.js ......
<!doctype html>
<html lang="en" >
<head>
<meta charset="utf-8" />
<title>html5 video player jquery plugin | script tutorials</title>
<link href="css/player.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.16/ui/jquery-ui.js"></script>
<script src="js/player.js"></script>
</head>
<body>
<header>
<h2>html5 video player jquery plugin</h2>
<a href="http://www.script-tutorials.com/html5-video-player-jquery-plugin/" class="stuts">back to original tutorial on <span>script tutorials</span></a>
</header>
<div class="container">
<div class="video_player">
<video controls="controls" poster="media/poster.jpg" style="width:420px; height:300px;">
<source src="media/video.ogg" type="video/ogg" />
<source src="media/video.mp4" type="video/mp4" />
<source src="media/video.webm" type="video/webm" />
</video>
<div class="custom_controls">
<a class="play" title="play"></a>
<a class="pause" title="pause"></a>
<div class="time_slider"></div>
<div class="timer">00:00</div>
<div class="volume">
<div class="volume_slider"></div>
<a class="mute" title="mute"></a>
<a class="unmute" title="unmute"></a>
</div>
</div>
</div>
<script>
$(function() {
$('.video_player').myplayer();
});
</script>
</div>
</body>
</html>
player.css
/* jquery */
*{
margin:0;
padding:0;
}
.container {
color: #000;
margin: 2px auto;
position: relative;
width: 420px;
}
#slideshow {
border:1px #000 solid;
box-shadow:4px 6px 6px #444444;
display:block;
margin:0 auto;
height:300px;
width:420px;
}
.container .slides {
display:none;
}
.ui-slider-handle {
display: block;
margin-left: -9px;
position: absolute;
z-index: 2;
}
.ui-slider-range {
bottom: 0;
display: block;
height: 100%;
left: 0;
position: absolute;
width: 100%;
z-index: 1;
}
/* player */
.video_player {
background-color: #e8e8e8;
border: 1px solid #888;
float: left;
padding: 10px;
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
/* controls */
.video_player .custom_controls {
clear: both;
height: 30px;
padding-top: 5px;
position: relative;
width: 100%;
}
.play, .pause, .volume, .time_slider, .timer {
float: left;
}
.play, .pause, .mute, .unmute {
cursor: pointer;
}
.play, .pause {
display: block;
height: 24px;
margin-left: 5px;
margin-right: 15px;
opacity: 0.8;
width: 33px;
transition: all 0.2s ease-in-out;
-moz-transition: all 0.2s ease-in-out;
-webkit-transition: all 0.2s ease-in-out;
-o-transition: all 0.2s ease-in-out;
}
.play {
background: url(../images/play.png) no-repeat;
}
.pause {
background: url(../images/pause.png) no-repeat;
display: none;
}
.play:hover, .pause:hover {
opacity: 1;
}
.time_slider {
border: 1px solid #5f5f5f;
height: 10px;
margin-top: 5px;
position: relative;
width: 420px;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
background: #777777;
background-image: -moz-linear-gradient(top, #777777, #9d9d9d);
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #777777),color-stop(1, #9d9d9d));
}
.time_slider .ui-slider-handle {
background: url(../images/handler.png) no-repeat;
cursor: pointer;
height: 16px;
opacity: 0.8;
top: -2px;
width: 16px;
}
.time_slider .ui-slider-handle.ui-state-hover {
opacity: 1;
}
.time_slider .ui-slider-range {
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
background: #e9742e;
background-image: -moz-linear-gradient(top, #e9742e, #c14901);
background-image: -webkit-gradient(linear,left top,left bottom,color-stop(0, #e9742e),color-stop(1, #c14901));
}
.timer {
color: #000;
font-size: 12px;
margin-left: 10px;
margin-top: 3px;
}
.volume {
bottom: 0;
color: #ffffff;
height: 35px;
overflow: hidden;
padding: 5px 10px 0;
position: absolute;
right: 0;
width: 33px;
}
.volume:hover {
background: url(../images/volume.png) no-repeat scroll 8px 0 transparent;
height: 161px;
}
.volume_slider {
height: 105px;
left: -1px;
opacity: 0;
position: relative;
width: 33px;
}
.volume:hover .volume_slider {
opacity: 1;
}
.volume_slider .ui-slider-handle {
background: url(../images/handler.png) no-repeat;
height: 15px;
left: 9px;
margin-bottom: -15px;
margin-left: 0;
opacity: 0.8;
width: 14px;
}
.volume_slider .ui-slider-handle.ui-state-hover {
opacity: 1;
}
.mute, .unmute {
bottom: 7px;
display: block;
height: 23px;
opacity: 0.8;
position: absolute;
text-indent: -999px;
width: 33px;
}
.mute:hover, .unmute:hover {
opacity: 1;
}
.mute {
background: url(../images/vol_full.png) no-repeat;
}
.unmute {
background: url(../images/vol_mute.png) no-repeat;
display: none;
}
player.js
function rectime(secs) {
var hr = math.floor(secs / 3600);
var min = math.floor((secs - (hr * 3600))/60);
var sec = math.floor(secs - (hr * 3600) - (min * 60));
if (hr < 10) {hr = '0' + hr; }
if (min < 10) {min = '0' + min;}
if (sec < 10) {sec = '0' + sec;}
if (hr) {hr = '00';}
return hr + ':' + min + ':' + sec;
}
(function($) {
$.fn.myplayer = function() {
return this.each(function() {
// variables
var $omain = $(this);
var $ovideo = $('video', $omain);
var $oplay = $('.play', $omain);
var $opause = $('.pause', $omain);
var $otimeslider = $('.time_slider', $omain);
var $otimer = $('.timer', $omain);
var $ovolslider = $('.volume_slider', $omain);
var $omute = $('.mute', $omain);
var $ounmute = $('.unmute', $omain);
var btimeslide = false;
var ivolume = 1;
// functions section
var preparetimeslider = function() {
if (! $ovideo[0].readystate) {
settimeout(preparetimeslider, 1000);
} else {
$otimeslider.slider({
value: 0,
step: 0.01,
orientation: 'horizontal',
range: 'min',
max: $ovideo[0].duration,
animate: true,
slide: function() {
btimeslide = true;
},
stop:function(e, ui) {
btimeslide = false;
$ovideo[0].currenttime = ui.value;
}
});
};
};
// events section
$oplay.click(function () {
$ovideo[0].play();
$oplay.hide();
$opause.css('display', 'block');
});
$opause.click(function () {
$ovideo[0].pause();
$opause.hide();
$oplay.css('display', 'block');
});
$omute.click(function () {
$ovideo[0].muted = true;
$ovolslider.slider('value', '0');
$omute.hide();
$ounmute.css('display', 'block');
});
$ounmute.click(function () {
$ovideo[0].muted = false;
$ovolslider.slider('value', ivolume);
$ounmute.hide();
$omute.css('display', 'block');
});
// bind extra inner events
$ovideo.bind('ended', function() {
$ovideo[0].pause();
$opause.hide();
$oplay.css('display', 'block');
});
$ovideo.bind('timeupdate', function() {
var inow = $ovideo[0].currenttime;
$otimer.text(rectime(inow));
if (! btimeslide)
$otimeslider.slider('value', inow);
});
// rest initialization
$ovolslider.slider({
value: 1,
orientation: 'vertical',
range: 'min',
max: 1,
step: 0.02,
animate: true,
slide: function(e, ui) {
$ovideo[0].muted = false;
ivolume = ui.value;
$ovideo[0].volume = ui.value;
}
});
preparetimeslider();
$ovideo.removeattr('controls');
});
};
})(jquery);