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 ...
随机推荐
- 【python2/3坑】从gensim的Word2Vec.load()的中文vector模型输出时显示unicode码
服务器上python2.7 打印出的e[0]对应的是 unicode码 于是分别尝试了用e[0].encode('utf-8')转码 和 e[0].decode('unicode-escape')依然 ...
- FEC之我见四
接上文,来详细的说明一下FEC前向纠错的具体实现: FEC_matrix是一个比较常用的算法,Vandermonde,范德蒙矩阵是法国数学家范德蒙提出的一种各列为几何级数的矩阵. 范德蒙矩阵的定义: ...
- HDU3579Hello Kiki(中国剩余定理)(不互质的情况)
One day I was shopping in the supermarket. There was a cashier counting coins seriously when a littl ...
- 【C++】标准库sort函数的自定义排序
自定义排序需要单独写一个compare函数 例1 LeetCode 056. Merge Intervals Given a collection of intervals, merge all ov ...
- 使用Anthem.NET 1.5中的FileUpload控件实现Ajax方式的文件上传
Anthem.NET刚刚发布了其最新的1.5版本,其中很不错的一个新功能就是对文件上传功能的Ajax实现.本文将简要介绍一下该功能的使用方法. Anthem.NET的下载与安装 Anthem.NET可 ...
- OIer应该知道的二进制知识
计算机使用\(2\)进制,这是众所周知的.在学习\(OI\)的过程中,\(2\)进制也显得尤为重要.有时候,细节决定成败,所以我想总结一下容易被遗忘和误解的关于\(2\)进制的知识. 1.运算符 &a ...
- 安装pyenv版本管理
系统:Centos7.4 安装pyenv是为了更好的管理python的版本. 在进行安装操作之前,首先使用普通用户test,进行操作,如下: #安装之前先安装依赖的库 [test@localhost ...
- Spring MVC Flash Attribute 的讲解与使用示例
转自:https://www.oschina.net/translate/spring-mvc-flash-attribute-example Spring MVC 3.1版本加了一个很有用的特性,F ...
- eclipse个人觉得有用的快捷键
CTRL+SHIFT+F 自动整理代码格式 CTRL+M 最大/还原当前编辑窗口 CTRL+/ 注释当前行 CTRL+1 快速修复 CTRL+D 删除当前行 SHIFT+ENTER 在当前行前面插入空 ...
- 利用包管理器安装Node.JS
步骤1:用curl获取源代码在我们用卷曲获取源代码之前,我们必须先升级操作系统,然后用卷发命令获取NodeSource添加到本地仓库. root@ubuntu-15:~#apt-get update安 ...