HTML5 vedio标签与canvas的结合实现视频同步模糊效果
来源:互联网 发布:qq游戏大厅mac版官方 编辑:程序博客网 时间:2024/04/30 04:31
首先是<vedio>的在线效果。
其次是对于canvas的基础知识。
FROM: http://zcblog.net/index.php/2011/343
你可能学过<video>和<canvas>这两个标签,那有没有想过这两个标签结合起来使用呢。其实,两个标签结合使用可以发生有趣的事情。下面来看一个简单的实例。
- <video width=480 height=360 id=v controls loop>
- <!--chrome-->
- <source src=video/video.mp4 type=video/mp4>
- <!--ff3.6以上,chrome,opera-->
- <source src=video/video.ogg type=video/ogg>
- <!--ff4.0以上,chrome,opera-->
- <source src=video/video.webm type=video/webm>
- </video>
我们给<video>标签设置了两个属性controls和loop。controls是向用户显示控件,比如播放按钮,loop是循环播放。在<video>标签中包含3个子元素<source>,每一个引用一段不同编码格式的视频,来兼容不同的浏览器。
不知道大家有没有用过在windows桌面播放视频,有些播放器可以支持这个功能。接下来我们就用<video>和<canvas>模拟这个有趣的功能。
html和css代码:
- body{background:black;}
- #c{position:absolute;top:0;bottombottom:0;left:0;rightright:0;width:100%;
- height:100%;}
- #v{position:absolute;top:50%;left:50%;margin:-180px 0 0 -240px;}
- <canvas id=c></canvas>
- <video id=v controls loop>
- <source src=video.ogg type=video/ogg>
- <source src=video.webm type=video/webm>
- <source src=video.mp4 type=video/mp4>
- </video>
我们让视频在浏览器中居中,并让canvas布满浏览器,把canvas元素放在前面是让他在视频的底下,来达到背景播放的效果。
js代码:
- document.addEventListener('DOMContentLoaded', function(){
- var v = document.getElementById('v');
- var canvas = document.getElementById('c');
- var context = canvas.getContext('2d');
- var cw = Math.floor(canvas.clientWidth / 10);
- var ch = Math.floor(canvas.clientHeight / 10);
- canvas.width = cw;
- canvas.height = ch;
- v.addEventListener('play', function(){
- draw(this,context,cw,ch);
- },false);
- },false);
- function draw(v,c,w,h) {
- if(v.paused || v.ended) return false;
- c.drawImage(v,0,0,w,h);
- setTimeout(draw,20,v,c,w,h);
- }
这段js代码很简单,添加一个播放事件,在canvas上画出播放时的放大画面,效果如下:
drawImage方法允许在canvas中插入其他图像(img和canvas元素) 。drawImage函数有三种函数原型:
- drawImage(image, dx, dy)
- drawImage(image, dx, dy, dw, dh)
- drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh)
第一个参数image可以用HTMLImageElement,HTMLCanvasElement或者HTMLVideoElement作为参数。dx和dy是image在canvas中定位的坐标值;dw和dh是image在canvas中即将绘制区域(相对dx和dy坐标的偏移量)的宽度和高度值;sx和sy是image所要绘制的起始位置,sw和sh是image所要绘制区域(相对image的sx和sy坐标的偏移量)的宽度和高度值。
setTimeout后面的参数是draw函数的参数,语法如下:
- var timeoutID = window.setTimeout(func, delay, [param1, param2, ...]);
- var timeoutID = window.setTimeout(code, delay);
提示:你可以先修改部分代码再运行。
由于我的服务器不支持文件下载,就无法看到视频了。这里推荐一个在线视频格式转换firefogg,大家可以在本地尝试一下。
需要注意不同浏览器支持的视频的格式哦!
- HTML5 vedio标签与canvas的结合实现视频同步模糊效果
- 使用HTML5的<vedio>标签插入视频,兼容主流浏览器
- HTML5 中的 canvas 标签 实现动画效果
- html5:<canvas>标签实现动态效果
- canvas与html5实现视频截图功能
- HTML5音频与视频实例(带声音的导航、视频与canvas结合、自制播放器)
- HTML5 Canvas 实现的Loading效果
- javascript结合canvas标签做出来的时钟效果
- HTML5的canvas标签
- HTML5的canvas标签
- HTML5的canvas标签
- HTML5 的<canvas>标签
- Android 中通过Canvas 与线程结合实现动画效果
- 用Javascript实现让Canvas变模糊的效果
- HTML5 Canvas实现透明效果
- 【HTML5】Canvas 实现放大镜效果
- html5 canvas实现刮刮卡效果
- HTML5教程实例-Canvas标签-坐标变换与路径结合使用
- unity3d事件函数整理,事件,回调函数,消息处理
- 效果超酷的textarea的输入字数限制及提示
- 修改DOS窗口编码格式
- 学习c++及c++用途
- 直接IO路径分析
- HTML5 vedio标签与canvas的结合实现视频同步模糊效果
- 多线程的那点儿事(基础篇)
- 企业网站SEO方案的制作流程和步骤
- [置顶]深入浅出---unix多进程编程之wait()和waitpid()函数
- JavaScript window.setTimeout() 的详细用法
- QTester Web自动化测试利器
- Asp.net错误“System.Web.HttpException: 超过了最大请求长度”解决办法
- 在 SQL Server 2008 中新建用户登录并指定该用户的数据库
- Silverlight中对WCF RIA 的异步调用的同步处理解决办法