分享
 
 
 

HTML5+CSS3+JQuery打造自定义视频播放器

王朝学院·作者佚名  2016-05-23
窄屏简体版  字體: |||超大  

HTML5+CSS3+JQuery打造自定义视频播放器来源:http://www.html5china.com/HTML5features/video/201109206_1994.html

简介HTML5的<video>标签已经被目前大多数主流浏览器所支持,包括还未正式发布的IE9也声明将支持<video>标签,利用浏览器原生特性嵌入视频有很多好处,所以很多开发者想尽快用上,但是真正使用前还有些问题要考虑,尤其是 Opera/Firefox 和IE/Safari浏览器所支持的视频编码不同的问题,Google几个月前发布的开源视频编码VP8有望能解决这一问题,另外Google还发布了开放网络媒体项目WebM,旨在帮助开发者为开放网络制作出世界级媒体格式,Opera, Firefox, Chrome和IE9都将支持VP8,而且Flash Player也将可以播放VP8,这就意味着我们很快就可以只制作一个版本的视频然后在所有主流浏览器上播放了。另外一个主要的问题就是如何构建自定义的HTML5<video>播放器,这是目前Flash Player的优势所在,利用Flash的IDE所提供的接口可以很方便的构建一个个性化的视频播放器,那HTML5的<video>标签要怎样才能实现呢?这个问题就是本文所要解决的!我们将开发一个HTML5<video>视频播放器的jQuery插件,并且可以很方便的进行自定义,将分为以下几个部分:1.视频控制工具条2.视频控制按钮3.打包成jQuery插件4.外观和体验5.自定义皮肤

视频控制工具条做为一个专业的web开发人员,我们创建一个视频播放器时一定希望它的外观在各个浏览器中看起来一致(consistent),但是通过下面的图可以看到目前各个浏览器提供的视频控制工具条外观各不相同:那就没办法了,我们得自己从头来创建这个控制工具条,利用HTML和CSS再加上一些图片实现起来并不算很难,另外通过HTML5多媒体元素提供的API我们可以很方便将创建的任何按钮与播放/暂停等事件进行绑定。视频控制按钮基本的视频控制工具条要包含一个播放/暂停按钮,一个进度条,一个计时器和一个音量控制按钮,我们将这些按钮放在<video>元素下面,并用一个div作为父容器:

xml/HTML Code复制内容到剪贴板<divclass="ghinda-video-controls"><aclass="ghinda-video-play"title="Play/Pause"></a><divclass="ghinda-video-seek"></div><divclass="ghinda-video-timer">00:00</div><divclass="ghinda-volume-box"><divclass="ghinda-volume-slider"></div><aclass="ghinda-volume-button"title="Mute/Unmute"></a></div></div>复制代码注意,我们使用元素的class属性来代替ID属性是为了方便在一个页面上使用多个播放器。打包成jQuery插件创建好控制按钮后我们需要配合多媒体元素的API来实现视频控制的目的,正如前面提到的一样我们将我们的播放器打包成jQuery插件,这样可以很好的实现复用,代码如下:

XML/HTML Code复制内容到剪贴板$.fn.gVideo=function(options){//buildmainoptionsbeforeelementiterationvardefaults={theme:'simpledark',childtheme:''};varoptions=$.extend(defaults,options);//iterateandreformateachmatchedelementreturnthis.each(function(){var$gVideo=$(this);//createhtmlstructure//mainwrappervar$video_wrap=$('<div></div>').addClass('ghinda-video-player').addClass(options.theme).addClass(options.childtheme);//controlswrapervar$video_controls=$('<divclass="ghinda-video-controls"><aclass="ghinda-video-play"title="Play/Pause"></a><divclass="ghinda-video-seek"></div><divclass="ghinda-video-timer">00:00</div><divclass="ghinda-volume-box"><divclass="ghinda-volume-slider"></div><aclass="ghinda-volume-button"title="Mute/Unmute"></a></div></div>');$gVideo.wrap($video_wrap);$gVideo.after($video_controls);这里先假设您了解jQuery并知道如何创建一个jQuery插件,因为这个不在本文的讨论范围之内,在上面这段脚本中我们使用jQuery动态创建视频控制工具条的元素,接下来为了绑定事件我们需要获取对应的元素:javaScript Code复制内容到剪贴板//getnewlycreatedelementsvar$video_container=$gVideo.parent('.ghinda-video-player');var$video_controls=$('.ghinda-video-controls',$video_container);var$ghinda_play_btn=$('.ghinda-video-play',$video_container);var$ghinda_video_seek=$('.ghinda-video-seek',$video_container);var$ghinda_video_timer=$('.ghinda-video-timer',$video_container);var$ghinda_volume=$('.ghinda-volume-slider',$video_container);var$ghinda_volume_btn=$('.ghinda-volume-button',$video_container);$video_controls.hide();//keepthecontrolshidden这里我们通过className方式获取,先让工具条隐藏直到所有资源加载完成,现在来实现播放/暂停按钮:Javascript Code复制内容到剪贴板vargPlay=function(){if($gVideo.attr('paused')==false){$gVideo[0].pause();}else{$gVideo[0].play();}};$ghinda_play_btn.click(gPlay);$gVideo.click(gPlay);$gVideo.bind('play',function(){$ghinda_play_btn.addClass('ghinda-paused-button');});$gVideo.bind('pause',function(){$ghinda_play_btn.removeClass('ghinda-paused-button');});$gVideo.bind('ended',function(){$ghinda_play_btn.removeClass('ghinda-paused-button');});大多数浏览器在右键点击视频时会提供一个独立的菜单,它也提供了视频控制功能,如果用户通过这个右键菜单控制视频那就会跟我们的自定义控件冲突,所以为了避免这一点我们需要绑定视频播放器自身的“播放”,“暂停”和“结束”事件,在事件处理函数中处理播放/暂停按钮,控制按钮的样式。为了创建进度条的拖动块,我们使用了jQuery UI的Slider组件:

JavaScript Code复制内容到剪贴板varcreateSeek=function(){if($gVideo.attr('readyState')){varvideo_duration=$gVideo.attr('duration');$ghinda_video_seek.slider({value:0,step:0.01,orientation:"horizontal",range:"min",max:video_duration,animate:true,slide:function(){seeksliding=true;},stop:function(e,ui){seeksliding=false;$gVideo.attr("currentTime",ui.value);}});$video_controls.show();}else{setTimeout(createSeek,150);}};createSeek();正如你所看到的,这里我们写了一个递归函数,通过循环比较video的readyState属性来判断视频是否已经准备好,否则我们就不能获得视频的时长也无法创建滑动块,当视频准备好后我们初始化滑动块并显示控制工具条,下一步我们通过绑定video元素的timeupdate事件实现计时器功能:JavaScript Code复制内容到剪贴板vargTimeFormat=function(seconds){varm=Math.floor(seconds/60)<10?"0"+Math.floor(seconds/60):Math.floor(seconds/60);vars=Math.floor(seconds-(m*60))<10?"0"+Math.floor(seconds-(m*60)):Math.floor(seconds-(m*60));returnm+":"+s;};varseekUpdate=function(){varcurrenttime=$gVideo.attr('currentTime');if(!seeksliding)$ghinda_video_seek.slider('value',currenttime);$ghinda_video_timer.text(gTimeFormat(currenttime));};$gVideo.bind('timeupdate',seekUpdate);这里我们用seekUpdate函数获取video的currentTime属性值然后调用gTimeFormat函数进行格式化后得到当前播放的时间点。至于音量控制控件我们还是利用jQuery UI的Slider组件然后利用自定义函数实现静音和取消静音的功能:

JavaScript Code复制内容到剪贴板$ghinda_volume.slider({value:1,orientation:"vertical",range:"min",max:1,step:0.05,animate:true,slide:function(e,ui){$gVideo.attr('muted',false);video_volume=ui.value;$gVideo.attr('volume',ui.value);}});varmuteVolume=function(){if($gVideo.attr('muted')==true){$gVideo.attr('muted',false);$ghinda_volume.slider('value',video_volume);$ghinda_volume_btn.removeClass('ghinda-volume-mute');}else{$gVideo.attr('muted',true);$ghinda_volume.slider('value','0');$ghinda_volume_btn.addClass('ghinda-volume-mute');};};$ghinda_volume_btn.click(muteVolume);最后当我们自己的自定义视频控制工具条构造完成后需要移除<video>标签的controls属性,这样浏览器默认的工具条就被去掉了。好了,我们的插件功能已经全部完成了,调用方法:

JavaScript Code复制内容到剪贴板$('video').gVideo();这会将我们的插件应用到页面上每一个video元素上。外观和体验好的,现在到了比较有意思的部分,也就是播放器的外观和体验了。当插件功能已经完成后利用一点CSS就可以很容易地自定义样式了,我们将全部使用CSS3来实现。首先,我们给播放器主容器加一些样式:

CSS Code复制内容到剪贴板.ghinda-video-player{float:left;padding:10px;border:5pxsolid#61625d;-moz-border-radius:5px;/*FF1+*/-ms-border-radius:5px;/*IEfuturePRoofing*/-webkit-border-radius:5px;/*Saf3+,Chrome*/border-radius:5px;/*Opera10.5,IE9*/background:#000000;background-image:-moz-linear-gradient(top,#313131,#000000);/*FF3.6*/background-image:-webkit-gradient(linear,lefttop,leftbottombottom,color-stop(0,#313131),color-stop(1,#000000));/*Saf4+,Chrome*/box-shadow:inset015px35px#535353;}下一步,我们设置视频控制工具条左边浮动使它们水平对齐,利用CSS3的opacity和transitions我们给播放/暂停和静音/取消静音按钮添加了非常不错的悬浮效果:CSS Code复制内容到剪贴板.ghinda-video-play{display:block;width:22px;height:22px;margin-right:15px;background:url(../images/play-icon.png)no-repeat;opacity:0.7;-moz-transition:all0.2sease-in-out;/*Firefox*/-ms-transition:all0.2sease-in-out;/*IEfuturep

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有