h5自定义播放器得实现原理
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--插入播放按钮得文字图标格式(具体使用方法可以百度http://fontawesome.dashgame.com/)--> <link rel="stylesheet" href="../css/font-awesome.css"> <!--页面结构设置得样式--> <style> body { padding: 0; margin: 0; font-family: 'microsoft yahei', 'Helvetica', simhei, simsun, sans-serif; background-color: #F7F7F7; } a { text-decoration: none; } .playerTitle{ width:100%; margin: 0 auto; line-height:100px; font-size: 40px; text-align: center; } .player{ width: 720px; height: 360px; margin: 0 auto; background: url("../images/loading.gif") center no-repeat; background-size: cover; position: relative; } video{ height:100%; margin: 0 auto; display: none; } .controls { width: 720px; height: 40px; position: absolute; left: 0px; bottom: -40px; background-color: #000; } .controls > .switch{ width: 20px; height: 20px; display: block; font-size: 20px; color: #fff; position: absolute; left: 10px; top: 10px; } .controls > .expand{ width: 20px; height: 20px; display: block; font-size: 20px; color: #fff; position: absolute; right: 10px; top: 10px; } .controls > .progress{ width: 430px; height: 10px; position: absolute; left:40px; bottom:15px; background-color: #555; } .controls > .progress > .bar{ width:100%; height:100%; border-radius: 3px; cursor: pointer; position: absolute; left: 0; top: 0; opacity: 0; z-index: 999; } .controls > .progress > .loaded{ width:60%; height:100%; background-color: #999; border-radius: 3px; position: absolute; left: 0; top: 0; z-index: 2; } .controls > .progress > .elapse{ width:0%; height:100%; background-color: #fff; border-radius: 3px; position: absolute; left: 0; top: 0; z-index: 3; } .controls > .time{ height: 20px; position: absolute; left:490px; top: 10px; color: #fff; font-size: 14px; } </style> </head> <body> <h3 class="playerTitle">视频播放器</h3> <div class="player"> <video src="../mp4/chrome.mp4"></video> <div class="controls"> <!--javascript:; a链接点击不让跳转 fa 库名fa-play 文字名 文字库使用方法--> <a href="javascript:;" class="switch fa fa-play"></a> <a href="javascript:;" class="expand fa fa-expand"></a> <div class="progress"> <!--点击的透明层,效果是点击改变进度条和播放得当前时间--> <div class="bar"></div> <!--缓冲进度条(由于是本地视频加载比较快所以就没法感受到没写0.0)--> <div class="loaded"></div> <!--播放进度条--> <div class="elapse"></div> </div> <div class="time"> <!--播放当前时间--> <span class="currentTime">00:00:00</span> \ <!--视频时间总长度--> <span class="totalTime">00:00:00</span> </div> </div> </div> <!--基于jquery的文件引入--> <script src="./jquery.min.js"></script> <script> /*通过jq来实现功能*/ $(function(){ /*1.获取播放器 对象的转换,把jquery转换为dom对象*/ var video=$("video")[0]; /*2.实现播放与暂停*/ $(".switch").click(function(){ /*实现播放与暂停的切换:如果是暂停>>播放 ,如果是播放 >> 暂停*/ if(video.paused){ video.play(); /*移除暂停样式,添加播放样式*/ } else{ video.pause(); /*移除播放样式,添加暂停样式*/ } /*设置标签的样式 fa-pause:暂停 fa-play:播放*/ $(this).toggleClass("fa-play fa-pause"); }); /*3.实现全屏操作*/ $(".expand").click(function(){ /*全屏>>不同浏览器需要添加不同的前缀>>能力测试*/ if(video.requestFullScreen){ video.requestFullScreen(); } else if(video.webkitRequestFullScreen){ video.webkitRequestFullScreen(); } else if(video.mozRequestFullScreen){ video.mozRequestFullScreen(); } else if(video.msRequestFullScreen){ video.msRequestFullScreen(); } }); /*4.实现播放业务逻辑:当视频文件可以播放时触发下面的事件*/ video.oncanplay=function(){ setTimeout(function(){ /*1.将视频文件设置为显示*/ video.style.display="block"; /*2.获取当前视频文件的总时长(以秒做为单位,同时获取了小数值),计算出时分秒*/ var total=video.duration; //01:01:40 00:00:36 /*3.计算时分少 60*60=3600 * 3700:3700/3600 * 3700:3700%3600 >> 100 /60*/ /*var hour=Math.floor(total/3600); /!*补0操作*!/ hour=hour<10?"0"+hour:hour; var minute=Math.floor(total%3600/60); minute=minute<10?"0"+minute:minute; var second=Math.floor(total%60); second=second<10?"0"+second:second;*/ var result=getResult(total) /*4.将计算结果展示在指定的dom元素中*/ $(".totalTime").html(result); },2000); } /*通过总时长计算出时分秒*/ function getResult(time){ var hour=Math.floor(time/3600); /*补0操作*/ hour=hour<10?"0"+hour:hour; var minute=Math.floor(time%3600/60); minute=minute<10?"0"+minute:minute; var second=Math.floor(time%60); second=second<10?"0"+second:second; /*返回结果*/ return hour+":"+minute+":"+second; } /*5.实现播放过程中的业务逻辑,当视频播放时会触发ontimeupdate事件 * 如果修改currentTime值也会触发这个事件,说白了,只要currenTime值变化,就会触发这个事件*/ video.ontimeupdate=function(){ /*1.获取当前的播放时间*/ var current=video.currentTime; /*2.计算出时分秒*/ var result=getResult(current); /*3.将结果展示在指定的dom元素中*/ $(".currentTime").html(result); /*4.设置当前播放进度条样式 0.12>>0.12*100=12+%>12%*/ var percent=current/video.duration*100+"%"; $(".elapse").css("width",percent); } /*6.实现视频的跳播*/ $(".bar").click(function(e){ /*1.获取当前鼠标相对于父元素的left值--偏移值*/ var offset= e.offsetX; /*2.计算偏移值相对总父元素总宽度的比例*/ var percent=offset/$(this).width(); /*3.计算这个位置对应的视频进度值*/ var current=percent*video.duration; /*4.设置当前视频的currentTime*/ video.currentTime=current; }); /*7.播放完毕之后,重置播放器的状态*/ video.onended=function(){ // 当前播放时间清零 video.currentTime=0; // 播放按钮的事件由暂停替换位播放 $(".switch").removeClass("fa-pause").addClass("fa-play"); } }); </script> </body> </html>
h5自定义播放器得实现原理的更多相关文章
- 从零开始学 Web 之 HTML5(四)拖拽接口,Web存储,自定义播放器
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- 基于 AVPlayer 自定义播放器
如果我只是简单的播放一个视频,而不需要考虑播放器的界面.iOS9.0 之前使用 MPMoviePlayerController, 或者内部自带一个 view 的 MPMoviePlayerViewCo ...
- 使用html5中video自定义播放器必备知识点总结以及JS全屏API介绍
一.video的js知识点: controls(控制器).autoplay(自动播放).loop(循环)==video默认的: 自定义播放器中一些JS中提供的方法和属性的记录: 1.play()控制视 ...
- 视频播放—— H5同层播放器接入规范
H5同层播放器接入规范 x5-video-player-type 启用H5同层播放器 通过video属性“x5-video-player-type”声明启用同层H5播放器 x5-video-playe ...
- 用H5和js写一个移动端自定义播放器
前言 由于html5自带的播放器样式不怎么好看,大多数人都是自己写一个来满足业务需求.这一次的需求如下: 1.不要上一曲下一曲 2.有进度条和播放暂停按钮 3.有时间显示 demo实现功能 1.进度条 ...
- 自制 h5 音乐播放器 可搜索
闲言碎语: 有好几天没有发表博客了,这也是因为一直开发音乐和完善我的博客项目,好不容易抽出时间总结一下这几天所做的东西,笔试又不断通知,实则匆忙 今天难得逃了一次课,就趁这时间,该写写就写写吧~~ 进 ...
- H5音乐播放器源码地址
源码获取 https://pan.baidu.com/s/1pR_bhIFFQWU6TK9ZvrRWIA 安卓安装包下载地址 https://pan.baidu.com/s/1Z8HF5LY ...
- H5音乐播放器源码共享
由于博客云后台管理工具写起东西来实在难受,所以直接共享源码了! https://pan.baidu.com/s/1XeRxlk7iv5qt1f16s64F9w H5源码!暂时只支持手机适配,电脑端 ...
- H5音乐播放器
前段时间无聊用JavaScript基于H5的audio写一个音乐播放器.误喷,技术有限,文笔不好之处希望各位大神海涵. 1.HTML代码: <div id="music" c ...
随机推荐
- IE input 去掉文本框的叉叉和密码输入框的眼睛图标
::-ms-clear, ::-ms-reveal{display: none;}
- 优秀开源项目之二:流媒体直播系统Open Broadcaster Software
Open Broadcaster Software(OBS)是一款用于音视频录制和直播的免费开源软件.可以轻松部署到多种平台,目前支持Windows.MAC和Linux. 特性: 1.高性能的实时视频 ...
- 洛谷【P1104】生日(插入排序版)
题目传送门:https://www.luogu.org/problemnew/show/P1104 题目很简单,我主要是来讲插入排序的. 所谓插入排序,就是从待排序数组不断将数据插入答案数组里. 假设 ...
- JAVA中重写equals()方法为什么要重写hashcode()方法说明
重写hashCode()时最重要的原因就是:无论何时,对同一个对象调用hashCode()都应该生成同样的值.如果在将一个对象用put()方法添加进HashMap时产生一个hashCode()值,而用 ...
- python setuptools安装
执行# python setup.py install 时发生如下错误 Traceback (most recent call last): File "setup.py", li ...
- virtual judge(专题一 简单搜索 A)
问题描述: Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘, ...
- 杂项-Log:log4net
ylbtech-杂项-Log:log4net log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等) ...
- varnish安装和配置
实验环境:CentOS7 Varnish是高性能开源的反向代理服务器和HTTP缓存服务器. #varnish服务器:172.16.252.142 [root@varnish localhost]#yu ...
- qtp ie_hook
今天要讲的内容是注册异类子控件授予强制HOOK,名字有点抽象,简单的说就是在一个QTP可识别的A类插件窗口对象中存在着B类插件的控件对象, 最常见的例子就是在应用程序中内嵌一个Browser对象子控件 ...
- centos7安装etcd
http://blog.csdn.net/dream_broken/article/details/52671344