和朋友聊天说到了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. std::string 的方法c_str() 和 data() 有什么区别

    1.从C++标准上的解释来看,只有一点区别: c_str() 返回一个指向正规C字符串的指针常量,该指针保证指向一个 size() + 1 长度的空间,而且最后一个字符肯定是 \0 : 而 data( ...

  2. 逆袭之旅DAY09.东软实训.接口

    2018年7月5日 package day0705.teacher.test1usb; /** * 测试类 * @author Administrator * */ public class UsbI ...

  3. javascript 日期函数

    获取当前日期的前一天的日期    var MyDate = new Date( );  //获取昨天的日期    var yesterday = myDate.getTime()-1000*60*60 ...

  4. 20 KMP匹配的Next值和Nextval值

     i       0    1    2    3    4    5    6    7    8 s     a    b    a    b    a    a    b    a    b n ...

  5. 通过滑动条控制Cube旋转

    private float speed = 10; private float speedValue; private GameObject slider; private GameObject cu ...

  6. 【资料收集】Converting Between cv::Mat and QImage or QPixmap

    参考: 方法一 Convert between cv::Mat and QImage 两种图片类转换 - Grandyang - 博客园 http://www.cnblogs.com/grandyan ...

  7. mac mamp环境 和linux下 安装redis 和可视化工具 Redis Desktop Manager

    mac下安装 第一步:安装redis 1. brew install redis 2.启动服务/usr/local/opt/redis/bin/redis-server 3.配置redis密码访问 编 ...

  8. 每天CSS学习之text-shadow

    今天学习的是CSS3的一个属性text-shadow.该属性能映射出文字的阴影. text-shadow一共就四个属性: text-shadow: h-shadow  v-shadow  [blur] ...

  9. 【转载】非对称加密过程详解(基于RSA非对称加密算法实现)

    1.非对称加密过程:         假如现实世界中存在A和B进行通讯,为了实现在非安全的通讯通道上实现信息的保密性.完整性.可用性(即信息安全的三个性质),A和B约定使用非对称加密通道进行通讯,具体 ...

  10. Traumland--梦乡--IPA--德语

    德国电影<<英俊少年>>的插曲.