js canvas实现擦除效果示例代码
发布时间 - 2026-01-11 00:50:18 点击率:次关于canvas的定义:

HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。
画布是一个矩形区域,您可以控制其每一像素。
canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。
html代码:
<div class="container"> <canvas id="canvas" width="200" height="50"></canvas> <div class="content">hello world</div> </div>
设置一个父容器,里面包括canvas标签,用于遮罩,content用于显示擦除遮罩层之后的内容
ps:设置canvas元素需要加上width和height属性,这样绘制的图形才能按照正常尺寸显示,否则在css里面设置宽高,虽然canvas标签的大小会正常显示,绘制的图形则会按照缺省宽高比例放大缩小,缺省的高度是300px,宽度是150px。
创建context对象,getContext("2d") 对象是内建的 HTML5 对象,拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法
var canvas = document.getElementById(id);
var ctx=canvas.getContext('2d');
绘制一个能覆盖容器的矩形,rect() 方法创建矩形,fill()绘制图像,默认颜色为黑色,可以使用fillStyle属性设置其他颜色
ctx.rect(0,0,canvas.width,canvas.height); ctx.fill();
图像绘制完成,下面是事件绑定,要实现擦除效果,pc上主要绑定鼠标事件,鼠标按下,启动擦除,鼠标松开,关闭擦除
canvas.addEventListener('mousedown', eventDown);
canvas.addEventListener('mouseup', eventUp);
canvas.addEventListener('mousemove', eventMove);
这里先设置一个变量,用以表示,鼠标是否处于按下的状态
var mousedown = false;
鼠标按下松开的事件比较简单,主要是设置状态参数
function eventDown(e){
e.preventDefault();
mousedown=true;
}
function eventUp(e){
e.preventDefault();
mousedown=false;
}
鼠标滑动事件,鼠标滑过的地方,以圆形区域清除图形
首先设置ctx.globalCompositeOperation = 'destination-out';
globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上。
destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。
这个属性是在先后绘制图形情况下,设置两个图形的显示方式。
属性值如下
具体显示效果,红色矩形是(新)目标图像。蓝色矩形是源(旧)图像:
鼠标移动函数
function eventMove(e){
e.preventDefault();
if(mousedown) {
var x = (e.clientX + document.body.scrollLeft || e.pageX) - offsetX || 0;
var y = (e.clientY + document.body.scrollTop || e.pageY) - offsetY || 0;
ctx.beginPath();
ctx.arc(x, y, 20, 0, Math.PI * 20);
ctx.fill();
}
}
arc() 方法创建弧/曲线(用于创建圆或部分圆),context.arc(x,y,r,sAngle,eAngle,counterclockwise);
ps:通过 arc() 来创建圆,请把起始角设置为 0,结束角设置为 2*Math.PI。
最终效果:
此方法只用于pc端,因为绑定的是鼠标事件,如果要在移动设备上也实现,需要绑定触摸事件
canvas.addEventListener('touchstart', eventDown);
canvas.addEventListener('touchend', eventUp);
canvas.addEventListener('touchmove', eventMove);
如果是触摸事件,返回的对象中没有直接的坐标相关信息,需要在changedTouches中去取到触摸事件对应的 Touch 对象。
if(e.changedTouches){
e=e.changedTouches[e.changedTouches.length-1];
}
补充更新
这里只实现了使用背景色遮罩的方法,补充一下使用图片作为遮罩的方法
var img = new Image(); img.src = 'cover.png';
创建一个图片对象,并设置图片地址,绘制图片到canvas元素需要使用到drawImage方法,具体使用方法可以参考: HTML5 canvas drawImage() 方法
这里使用的时候需要注意,图片加载是异步的,有时会加载的比较慢,在后续的绘制操作过程中,最好是在图片加载完成后再进行
img.onload = function() {
ctx.drawImage(img, 0, 0,canvas.width, canvas.height);
ctx.globalCompositeOperation = 'destination-out';
//其他操作...
}
最终实现效果:
完整代码下载:
github地址: https://github.com/Martian1/erase.js
本地下载:http://xiazai./201704/yuanma/erase.js-master().rar
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# canvas擦除效果
# js
# canvas
# 动画效果
# js擦除效果
# js canvas实现擦除动画
# 能在网页中写字和能擦写的js程序
# 鼠标
# 绑定
# 按下
# 擦除
# 是在
# 加载
# 设置为
# 的是
# 是一个
# 本地下载
# 已有
# 您可以
# 要在
# 相关信息
# 可以使用
# 请把
# 上也
# 这篇文章
# 谢谢大家
# 则在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
JS经典正则表达式笔试题汇总
Laravel如何发送邮件和通知_Laravel邮件与通知系统发送步骤
Laravel如何实现登录错误次数限制_Laravel自带LoginThrottles限流配置【方法】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何在万网利用已有域名快速建站?
Laravel storage目录权限问题_Laravel文件写入权限设置
如何用搬瓦工VPS快速搭建个人网站?
MySQL查询结果复制到新表的方法(更新、插入)
Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
如何批量查询域名的建站时间记录?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel如何保护应用免受CSRF攻击?(原理和示例)
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
googleplay官方入口在哪里_Google Play官方商店快速入口指南
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
七夕网站制作视频,七夕大促活动怎么报名?
PHP正则匹配日期和时间(时间戳转换)的实例代码
如何用花生壳三步快速搭建专属网站?
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
C++用Dijkstra(迪杰斯特拉)算法求最短路径
高性价比服务器租赁——企业级配置与24小时运维服务
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
常州企业网站制作公司,全国继续教育网怎么登录?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
PHP 500报错的快速解决方法
如何有效防御Web建站篡改攻击?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
如何在阿里云虚拟服务器快速搭建网站?
如何用PHP快速搭建CMS系统?
在Oracle关闭情况下如何修改spfile的参数
如何为不同团队 ID 动态生成多个非值班状态按钮
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
高端云建站费用究竟需要多少预算?
Python文件操作最佳实践_稳定性说明【指导】
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
制作公司内部网站有哪些,内网如何建网站?
,在苏州找工作,上哪个网站比较好?
Laravel如何使用Collections进行数据处理?(实用方法示例)
如何用VPS主机快速搭建个人网站?
linux写shell需要注意的问题(必看)
深圳网站制作培训,深圳哪些招聘网站比较好?
Laravel如何使用Telescope进行调试?(安装和使用教程)
详解MySQL数据库的安装与密码配置
Laravel怎么实现验证码功能_Laravel集成验证码库防止机器人注册

