博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jquery和css自定义video播放控件。
阅读量:5299 次
发布时间:2019-06-14

本文共 5218 字,大约阅读时间需要 17 分钟。

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

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

 

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

HTML5 Video 基础标签  

幸运的是HTML5 Video 的Api可以用JavaScript访问,并使用他们来作为控制视频的媒介.

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

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

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

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

  好的,这是所有的介绍.现在让我们来编码.首先,我们要创建一个简单的播放/暂停按钮.  

我们可以轻松的控制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支持视频回放.这里我们要显示视频的当前播放时间和总时间.

Current play time:
Video duration:

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

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

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

 视频进度条

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

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

//get HTML5 video time durationvideo.on('loadedmetadata', function() {   $('.duration').text(video[0].duration));}); //update HTML5 video current play timevideo.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 controlvar 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;};

 

进阶-显示缓冲栏

我们需要给视频制作一个缓冲栏让用户知道视频加载了多少.

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

//loop to get HTML5 video buffered datavar 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);

音量控制

现在,我们要增加声音控制.有两种不同的音量控制方法.静音按钮/音量栏

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属性来控制.

不幸的是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('
'); $('.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;});

 

 

转载于:https://www.cnblogs.com/dengchangliang/p/4865610.html

你可能感兴趣的文章
第一册:lesson seventy nine.
查看>>
GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例
查看>>
团队作业
查看>>
数据持久化时的小bug
查看>>
mysql中key 、primary key 、unique key 与index区别
查看>>
bzoj2257
查看>>
Linux查看文件编码格式及文件编码转换<转>
查看>>
Leetcode: Find Leaves of Binary Tree
查看>>
Vue 模板解释
查看>>
http://www.bootcss.com/
查看>>
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
查看>>
将多张图片和文字合成一张图片
查看>>
自己动手写ORM(01):解析表达式树生成Sql碎片
查看>>
如何使用USBWebserver在本机快速建立网站测试环境
查看>>
百度Ueditor编辑器的Html模式自动替换样式的解决方法
查看>>
变量提升
查看>>
线性表可用顺序表或链表存储的优缺点
查看>>
在现有的mysql主从基础上,搭建mycat实现数据的读写分离
查看>>
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>