jQ效果:jQuery和css自定义video播放控件

下面介绍一下经过jquery和css自定义video播放控件。
css

Html5 Video是如今html5最流行的功能之一,获得了大多数最新版本的浏览器支持.包括IE9,也是如此.不一样的浏览器提供了不一样的原生态浏览器视频空间.咱们制做自定义视频控件为了在全部的浏览器中有一个相同的Html5视频控件而不受默认视频控件的控制.html

 

实际上,自定义视频控件并不困难.本文将告诉你如何用jQuery自定义视频控件,但愿对你有用!html5

HTML5 Video 基础标签  

<video id="myVideo" controls poster="video.jpg" width="600" height="400" >
    <source src="video.mp4" type="video/mp4" />
    <source src="video.webm" type="video/webM" />
    <source src="video.ogv" type="video/ogg" />
    <p>Your browser does not support the video tag.</p>
</video>

幸运的是HTML5 Video 的Api能够用JavaScript访问,并使用他们来做为控制视频的媒介.jquery

  在编码以前让我简单的介绍一下jQuery是如何获取video标签的.web

  在JavaScript中咱们使用getElementById('videoID')来获取Video标签,做为结果,咱们会获取到一个Dom对象.可是这不是等价的jQuery对象.$("videoID")会返回一个jQuery对象.不是Dom对象.这就是为何在将其转换为Dom对象以前咱们不能直接使用jQuery选择器调用/使用Html5 Video的Dom属性和功能.  chrome

//return a DOM object
var video = document.getElementById('videoID'); //or
var video = $('#videoID').get(0); //or
var video = $('#videoID')[0]; //return a jQuery object
var video = $('#videoID');

 Video Play/Pause Controls 播放/暂停 按钮

  好的,这是全部的介绍.如今让咱们来编码.首先,咱们要建立一个简单的播放/暂停按钮.  浏览器

<div class="control">
    <a href="#" class="btnPlay">Play/Pause</a>
</div>

咱们能够轻松的控制Html5 Video的播放与暂停状态.缓存

//Play/Pause control clicked
$('.btnPlay').on('click', function() { if(video[0].paused) { video[0].play(); } else { video[0].pause(); } return false; };

显示视频播放时间和持续时间

Html5 Video支持视频回放.这里咱们要显示视频的当前播放时间和总时间.app

<div class="progressTime"> Current play time: <span class="current"></span> Video duration: <span class="duration"></span>
</div>

为了获得视频的总时间,咱们要确保视频元数据已经加载.这个时候咱们要用到Html5 Video的loadedmetadata事件.ide

  对于当前的视频播放时间.咱们能够用Html5 Video timeupdate事件来保证他的更新.

//get HTML5 video time duration
video.on('loadedmetadata', function() { $('.duration').text(video[0].duration); }); //update HTML5 video current play time
video.on('timeupdate', function() { $('.current').text(video[0].currentTime); });

 视频进度条

  在这里咱们将会把当前播放时间和总的时间长度转换为更人性化的进度条.

<style> .progressBar { position: relative; width: 100%; height: height:10px; backgroud-color: #000;
} .timeBar { position: absolute; top: 0; left: 0; width: 0; height: 100%; background-color: #ccc;
}
</style>
<div class="progressBar">
    <div class="timeBar"></div>
</div>

下面的js就是经过视频的总时间与当前时间的计算,得到播放进度条。

//get HTML5 video time duration
video.on('loadedmetadata', function() { $('.duration').text(video[0].duration)); }); //update HTML5 video current play time
video.on('timeupdate', function() { var currentPos = video[0].currentTime; //Get currenttime
   var maxduration = video[0].duration; //Get video duration
   var percentage = 100 * currentPos / maxduration; //in %
   $('.timeBar').css('width', percentage+'%'); });

下面实现播放进度条的拖拽,来播放视频

var timeDrag = false;   /* Drag status */ $('.progressBar').mousedown(function(e) { timeDrag = true; updatebar(e.pageX); }); $(document).mouseup(function(e) { if(timeDrag) { timeDrag = false; updatebar(e.pageX); } }); $(document).mousemove(function(e) { if(timeDrag) { updatebar(e.pageX); } }); //update Progress Bar control
var updatebar = function(x) { var progress = $('.progressBar'); var maxduration = video[0].duration; //Video duraiton
    var position = x - progress.offset().left; //Click pos
    var percentage = 100 * position / progress.width(); //Check within range
    if(percentage > 100) { percentage = 100; } if(percentage < 0) { percentage = 0; } //Update progress bar and video currenttime
    $('.timeBar').css('width', percentage+'%'); video[0].currentTime = maxduration * percentage / 100; };

 

进阶-显示缓冲栏

咱们须要给视频制做一个缓冲栏让用户知道视频加载了多少.

<style> .progressBar { position: relative; width: 100%; height: height:10px; backgroud-color: #000;
} .bufferBar { position: absolute; top: 0; left: 0; width: 0; height: 100%; background-color: #ccc;
}
</style>
<div class="progressBar">
   <div class="bufferBar"></div>
</div>

Html5 Video缓冲属性将返回一个对象的缓存范围.所以,咱们将使用缓存数据的最后一个值.

//loop to get HTML5 video buffered data
var startBuffer = function() { var maxduration = video[0].duration; var currentBuffer = video[0].buffered.end(0); var percentage = 100 * currentBuffer / maxduration; $('.bufferBar').css('width', percentage+'%'); if(currentBuffer < maxduration) { setTimeout(startBuffer, 500); } }; setTimeout(startBuffer, 500);

音量控制

如今,咱们要增长声音控制.有两种不一样的音量控制方法.静音按钮/音量栏

<a href="#" class="muted" >Mute/Unmute</a>
<div class="volumeBar">
   <div class="volume"></div>
</div>

js:

//Mute/Unmute control clicked
$('.muted').click(function() { video[0].muted = !video[0].muted; return false; }); //Volume control clicked
$('.volumeBar').on('mousedown', function(e) { var position = e.pageX - volume.offset().left; var percentage = 100 * position / volume.width(); $('.volumeBar').css('width', percentage+'%'); video[0].volume = percentage / 100; });

 快进/快退 倒带控制

Html5 Video支持播放速度的改变.咱们可使用playbackrate属性来控制.

<div class="control">
   <a href="#" class="ff">Fast Forward</a>
   <a href="#" class="rw">Rewind</a>
   <a href="#" class="sl">Slow Motion</a>
</div>

不幸的是FireFox不支持playbackrate属性.以及有些版本的chrome浏览器不支持负值(倒带).到目前为止,只有Safri浏览器彻底支持.

/Fast forward control
$('.ff').on('click', function() { video[0].playbackrate = 3; return false; }); //Rewind control
$('.rw').on('click', function() { video[0].playbackrate = -3; return false; }); //Slow motion control
$('.sl').on('click', function() { video[0].playbackrate = 0.5; return false; });

其余

  除了主要的控制插件.还能够作一些额外的控制.例如全屏播放

$('.fullscreen').on('click', function() { //For Webkit
   video[0].webkitEnterFullscreen(); //For Firefox
   video[0].mozRequestFullScreen(); return false; });

开灯关灯控制

$('.btnLight').click(function() { if($(this).hasClass('on')) { $(this).removeClass('on'); $('body').append('<div class="overlay"></div>'); $('.overlay').css({ 'position':'absolute', 'width':100+'%', 'height':$(document).height(), 'background':'#000', 'opacity':0.9, 'top':0, 'left':0, 'z-index':999 }); $('#myVideo').css({ 'z-index':1000 }); } else { $(this).addClass('on'); $('.overlay').remove(); } return false; });

 

原文地址:http://www.inwebson.com/html5/custom-html5-video-controls-with-jquery/#comment-form

相关文章
相关标签/搜索