详解基于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实现的响应式导航
Oct 31 HTML / CSS
使用CSS3实现input多选框自定义样式的方法示例
Jul 19 HTML / CSS
详解FireFox下Canvas使用图像合成绘制SVG的Bug
Jul 10 HTML / CSS
HTML5重塑Web世界它将如何改变互联网
Dec 17 HTML / CSS
html5声频audio和视频video等新特性详细说明
Dec 26 HTML / CSS
HTML5 input placeholder 颜色修改示例
May 30 HTML / CSS
html5的canvas方法使用指南
Dec 15 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
Aug 28 HTML / CSS
canvas拼图功能实现代码示例
Nov 21 HTML / CSS
关于canvas.toDataURL 在iOS运行失败的问题解决
Sep 16 HTML / CSS
CSS完成视差滚动效果
Apr 27 HTML / CSS
Html5同时支持多端sdk的小技巧
Nov 17 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
PHP5+UTF8多文件上传类
2008/10/17 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
windows下安装php的memcache模块的方法
2015/04/07 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
PHP5.5新特性之yield理解与用法实例分析
2019/01/11 PHP
Mootools 1.2教程(2) DOM选择器
2009/09/14 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
动态的创建一个元素createElement及删除一个元素
2014/01/24 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
JavaScript中的Function函数
2015/08/27 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
nodejs的HTML分析利器node-jquery用法浅析
2016/11/08 NodeJs
jquery自定义插件结合baiduTemplate.js实现异步刷新(附源码)
2016/12/22 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
分享vue.js devtools遇到一系列问题
2017/10/24 Javascript
Vue使用NPM方式搭建项目
2018/10/25 Javascript
Vue列表渲染的示例代码
2018/11/01 Javascript
微信公众号H5之微信分享常见错误和问题(小结)
2019/11/14 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
WebStorm中如何将自己的代码上传到github示例详解
2020/10/28 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
2015/12/22 Python
python编写简单爬虫资料汇总
2016/03/22 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
2018/01/27 Python
Python使用googletrans报错的解决方法
2018/09/25 Python
Series和DataFrame使用简单入门
2019/11/13 Python
利用python实现PSO算法优化二元函数
2019/11/13 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
初中科学教学反思
2014/01/21 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
mysql中int(3)和int(10)的数值范围是否相同
2021/10/16 MySQL
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript
CSS使用SVG实现动态分布的圆环发散路径动画
2022/12/24 HTML / CSS