<!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="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; 420px; } #slideshow { border:1px #000 solid; box-shadow:4px 6px 6px #444444; display:block; margin:0 auto; height:300px; 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; 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; 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; 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; 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; 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; 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; 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; 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; 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);