和朋友聊天说到了video自定义样式问题,今天抽空简单试验了一下,下面贴上代码。

dom结构如下:

<video id="video1" width="399" height="300" poster="video_bg.jpg">
<source src="http://nettuts.s3.amazonaws.com/763_sammyJSIntro/trailer_test.mp4" type="video/mp4" />
</video>
<div id="isPlay" class="stop"></div>
<div id="current"></div> <!-- 当前进度 -->
<div id="buffered"></div> <!-- 下载进度 秒 -->
<div id="duration"></div> <!-- 总时长 -->
<div id="fullScreen">全屏</div> <!-- 全屏按钮 -->
<div id="progress"> <!-- 进度条 -->
<div id="bar"></div> <!-- 播放进度 -->
<div id="buffer"></div> <!-- 缓存进度 -->
</div>

js代码如下:

var isPlay = document.getElementById('isPlay');
var video1 = document.getElementById('video1');
var current = document.getElementById('current');
var buffered = document.getElementById('buffered');
var duration = document.getElementById('duration');
var fullScreen = document.getElementById('fullScreen');
var progress = document.getElementById('progress');
var bar = document.getElementById('bar');
var buffer = document.getElementById('buffer');
// 补零
function zeroFill(num){
if (num<10) {
num = "0" +num;
}
return num;
};
// 处理秒数为时分秒 h:m:s
function getTime(num){
var m = zeroFill(Math.floor(num/60)),remainder = zeroFill(Math.floor(num%60)),h = zeroFill(Math.floor(m/60)),time = ''+h+':'+m+':'+remainder+'';
return time;
};
//全屏方法
function launchFullScreen(element) {
if(element.requestFullscreen) {
element.requestFullscreen();
} else if(element.mozRequestFullScreen) {
element.mozRequestFullScreen();
} else if(element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
} else if(element.msRequestFullscreen) {
element.msRequestFullscreen();
}
};
// 播放暂停点击方法
isPlay.onclick=function(){
if(isPlay.className=='stop'){
video1.play();
bufferTimer = setInterval(function(){
buffer.style.width = video1.buffered.end(0)/video1.duration*100+"%";
},1000/30);
if(video1.buffered.end(0) == video1.duration){
buffer.style.width = "100%";
clearInterval(bufferTimer);
}
timer = setInterval(function(){
bar.style.width = video1.currentTime/video1.duration*100+"%";
},1000/30)
isPlay.className="play";
}else if(isPlay.className=='play'){
video1.pause();
clearInterval(timer);
isPlay.className="stop";
}
};
// 当视频播放位置已经改变
video1.ontimeupdate = function(){
current.innerHTML = getTime(this.currentTime);
duration.innerHTML = getTime(this.duration);
buffered.innerHTML = this.buffered.end(0);
if(this.currentTime == this.duration){
isPlay.className="stop";
}
};
// 进度条点击方法
progress.onclick = function(e){
var barLength = e.pageX - progress.offsetLeft;
video1.currentTime = barLength/progress.clientWidth*video1.duration;
bar.style.width = barLength/progress.clientWidth*100+"%"; };
// 全屏按钮点击方法
fullScreen.onclick = function(){
launchFullScreen(video1);
};

实现效果如下:

如有表述不准确之处,欢迎指正,欢迎补充,感谢阅读。

自定义video样式的更多相关文章

  1. 【转】如何修改 video 样式

    我们这里说的“修改 video 样式”并不是要自己实现一套 controls,而是尝试修改 video 的默认样式 隐藏全屏按钮 这个很容易查到 video::-webkit-media-contro ...

  2. Siteserver-stl:searchOutput(搜索结果)自定义显示样式

    stl:searchOutput 自定义显示样式 自定义搜索提交表单需要在<stl:searchOutput>中嵌入显示搜索结果的标签,必须包含的标签 有<stl:pageConte ...

  3. jQuery自定义滚动条样式插件mCustomScrollbar

    如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScro ...

  4. 自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示分割线.

    一, 经历 1> 自定义plain 样式的 tableview,模拟器上不显示分割线,真机上却显示cell 下面的分割线. 2> 尝试使用表格的separatorStyle属性,尝试失败. ...

  5. Winform自定义窗体样式,实现标题栏可灵活自定义

    最近在编写C/S结构应用程序时,感觉窗体的标题栏样式太死板了,标题文字不能更改大小.颜色.字体等,按钮不能隐藏等问题,在网上也查找了许多相关的资料,没有找到合适的解决方案,发现许多人也在寻求这个问题, ...

  6. jquery和css自定义video播放控件

    下面介绍一下通过jquery和css自定义video播放控件. Html5 Video是现在html5最流行的功能之一,得到了大多数最新版本的浏览器支持.包括IE9,也是如此.不同的浏览器提供了不同的 ...

  7. WPF 自定义滚动条样式

    先看一下效果: 先分析一下滚动条有哪儿几部分组成: 滚动条总共有五部分组成: 两端的箭头按钮,实际类型为RepeatButton Thumb 两端的空白,实际也是RepeatButton 最后就是Th ...

  8. Android设置选项开发及自定义Preference样式

    一个完整的Android应用程序都应该提供选项(或者叫偏好设置等等)让用户对APP的表现形式能够进行设置,比如说是否加入用户体验计划,或者是否自动升级.定时提醒.开启自启动.后台运行等等.提供一个好的 ...

  9. Android: 自定义Tab样式,一种简单的方式。

    之前看到过论坛里已经有人发过自定义Tab样式的帖子,感觉有些复杂了,这里分享个简单的方法. 1.制作4个9patch的tab样式,可参考android默认的资源 tab_unselected.9.pn ...

随机推荐

  1. Easy and cheap cluster building on AWS backup

    https://grapeot.me/easy-and-cheap-cluster-building-on-aws.html Thu 17 July 2014 , by Yan Wang | 2 Co ...

  2. web前端开发面试题(答案)

    1.xhtml和html有什么区别? HTML是一种基本的WEB网页设计语言,XHTML是一个基于XML的置标语言最主要的不同:XHTML 元素必须被正确地嵌套.XHTML 元素必须被关闭.标签名必须 ...

  3. linux系统管理 系统文件

    常用的目录作用 '/' 根目录 '/bin' 命令保存目录(普通用户读取的命令) '/boot' 启动目录,启动相关文件 '/dev' 设备文件保存目录 '/etc' 配置文件保存目录 '/home' ...

  4. Win10系列:UWP界面布局基础6

    资源合并 前面提到过,可以将资源字典定义在单独的XAML文件中,这样的文件被称为资源字典文件.那么,在需要引用文件中的资源时可以通过ResourceDictionary元素的MergedDiction ...

  5. day06 元组类型

    一.什么是元组? 元组就是一个不可变的列表 元组的基本使用: 1.用途:  用于存放多个值,当存放多个任意类型的值 2.定义方式:在()内用逗号分隔开多个任意类型的值 t=(1,3.1,'aaa',( ...

  6. 简单选择排序(Simple Selection Sort)

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  7. Java数值类型之间转换

    Java之间的数值转换如图所示,实心箭头代表无数据丢失,虚线箭头代表可能丢失 例如:123456789是一个大的整数,包含的位数比float类型能够表达的位数多,但这个数转换为float类型时,将会得 ...

  8. Docker小白从零入门实战

    环境:Centos 6.9 0.查看是否满足安装需求. 先检查服务器环境,docker要求操作系统CentOS6以上,kernel 版本必须2.6.32-431或更高,即>=CentOS 6.5 ...

  9. loadrunner json参数化

    因为json格式有{},所以LR参数化时如果也用默认的{}的话,会冲突,这样脚本运行时就无法识别,导致不能正确的读取参数化文件里的内容,此时把参数化的{}改成其他符号即可,比如<>

  10. Java实验2

    1.给定一组字符,编程输出里面数值最大者. package experiment; import java.util.Arrays; public class ShenYue { public sta ...