详解基于canvas的视频遮罩插件


Posted in HTML / CSS onJanuary 04, 2018

为一个视频添加一个覆盖物,从而挡住视频某区域,在视频的某一时间段,比如第10到第20分钟不显示划定的这块区域。应用场景包括 遮挡卫视图标 、 遮挡视频右下角广告 、 充当马赛克 等。

一个长视频可能包含多个遮罩,每个遮罩有特定的显示时间(在此时间外,隐藏该遮罩)。

前端实现视频遮罩

有 基于div 和 基于canvas 两种技术方案,本文是使用canvas完成的。

主要原理是在HTML的video标签上贴上一个透明的canvas图层,然后响应mousedown、mousemove、mouseup事件。 由于canvas事件只是基于canvas元素,所以canvas内部每个元素(一个矩形,一个圆等)的事件响应要利用坐标来自己代码完成。

插件GitHub地址

https://github.com/cunzaizhuyi/maskPlugin

演示地址
http://htmlpreview.github.io/?https://github.com/cunzaizhuyi/maskPlugin/blob/master/mask/mask.html

实现的功能点

  1. 画遮罩(矩形)
  2. 设置遮罩样式(提供API)
  3. 遮罩移动
  4. 遮罩缩放
  5. canvas上鼠标样式变换

封装的API

名称 值类型 说明
1、矩形相关设置    
fillStyle 颜色值 矩形填充色, 默认为'#eeeeee'
strokeStyle 颜色值 矩形边界线颜色, 默认为'#0000ff'
inRectCursor 字符串 当鼠标处于某个小矩形内部时鼠标样式,默认为'move'。可以设置为'pointer'之类的。
2、矩形边界上的八个小矩形 相关设置    
bRectsStrokeStyle 颜色值 矩形边界上的小矩形的颜色,默认为'#0000ff'
bSideLength number 矩形边界上小矩形的边长值,默认为6
3、遮罩时间相关    
masksTime   每个遮罩的开始显示时间和结束显示时间,一个遮罩对应一个矩形

masksTime举例:

[{
    maskId: 1,
    startTime: 0,
    endTime: 10,
}, {maskId: 2,
    startTime: 3,
    endTime: 13,
}]

最后

这个基于原生canvas的700多行的小插件,对于探索canvas的世界可能仅仅是一个开始。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
利用CSS3的特性改变文本选中时的颜色
Sep 11 HTML / CSS
css3媒体查询中device-width和width的区别详解
Mar 27 HTML / CSS
详解HTML5中的标签
Jun 19 HTML / CSS
使用HTML5 Canvas API中的clip()方法裁剪区域图像
Mar 25 HTML / CSS
用HTML5制作视频拼图的教程
May 13 HTML / CSS
HTML5 history新特性pushState、replaceState及两者的区别
Dec 26 HTML / CSS
HTML5 Canvas的常用线条属性值总结
Mar 17 HTML / CSS
如何避免常见的6种HTML5错误用法
Nov 06 HTML / CSS
html5 Canvas实现图片旋转的示例
Jan 15 HTML / CSS
Canvas系列之滤镜效果
Feb 12 HTML / CSS
纯CSS如何禁止用户复制网页的内容
Nov 01 HTML / CSS
CSS实现背景图片全屏铺满自适应的3种方式
Jul 07 HTML / CSS
详解HTML5中的picture元素响应式处理图片
Jan 03 #HTML / CSS
canvas 阴影和图形变换的示例代码
Jan 02 #HTML / CSS
canvas仿写贝塞尔曲线的示例代码
Dec 29 #HTML / CSS
Canvas绘制浮动球效果的示例
Dec 29 #HTML / CSS
微信小程序“圣诞帽”的实现思路详解
Dec 28 #HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
Dec 28 #HTML / CSS
HTML5 解决苹果手机不能自动播放音乐问题
Dec 27 #HTML / CSS
You might like
php+AJAX传送中文会导致乱码的问题的解决方法
2008/09/08 PHP
php 3行代码的分页算法(求起始页和结束页)
2009/10/21 PHP
php程序效率优化的一些策略小结
2010/07/17 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHP面向对象之工作单元(实例讲解)
2017/06/26 PHP
jQuery学习7 操作JavaScript对象和集合的函数
2010/02/07 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
Nodejs实现批量下载妹纸图
2015/05/28 NodeJs
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
Augularjs-起步详解
2016/07/08 Javascript
利用JS轻松实现获取表单数据
2016/12/06 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
Nodejs下使用gm圆形裁剪并合成图片的示例
2018/02/22 NodeJs
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
[02:12]2015国际邀请赛 SHOWOPEN
2015/08/05 DOTA
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
python使用PyFetion来发送短信的例子
2014/04/22 Python
python数据类型_元组、字典常用操作方法(介绍)
2017/05/30 Python
解决python3中解压zip文件是文件名乱码的问题
2018/03/22 Python
Python-openCV读RGB通道图实例
2020/01/17 Python
代码总结Python2 和 Python3 字符串的区别
2020/01/28 Python
Tensorflow: 从checkpoint文件中读取tensor方式
2020/02/10 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
2020/02/12 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
EJB的角色和三个对象
2015/12/31 面试题
《夏夜多美》教学反思
2014/02/17 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
教师个人年终总结
2015/02/11 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
MySQL 隔离数据列和前缀索引的使用总结
2021/05/14 MySQL