游乐游手机版
首页/前端开发/文章详情

HTML Canvas 实现刮刮乐与橡皮擦擦除效果教程

时间:2026-08-17 14:42
实现刮刮乐和橡皮擦这类 Canvas 擦除效果,核心并不在“往上绘制什么”,而在“把上层内容真正擦除掉”。常见做法是借助 globalCompositeOperation 的 "destination-out " 模式,将顶层遮罩层直接抹去,而不是简单覆盖一层颜色。实际开发中,通常需要把绘制拆分为两层

实现刮刮乐和橡皮擦这类 Canvas 擦除效果,核心并不在“往上绘制什么”,而在“把上层内容真正擦除掉”。常见做法是借助 globalCompositeOperation 的 "destination-out" 模式,将顶层遮罩层直接抹去,而不是简单覆盖一层颜色。实际开发中,通常需要把绘制拆分为两层:底层放奖品或目标内容,顶层铺设一层不透明遮罩;当用户开始刮开或擦除时,再切换到对应的合成模式进行处理。同时,鼠标事件与触摸事件的坐标建议统一换算,避免在不同设备上出现位置偏移;再结合圆形擦除笔触与圆角线条细节,整体交互会更自然,滑动体验也会更顺畅。

HTML Canvas 怎么实现刮刮乐与橡皮擦擦除效果

使用 Canvas 制作刮刮乐效果或橡皮擦擦除功能,最关键的一步其实只有一个:将 globalCompositeOperation 设置为 "destination-out" 模式。这个模式并不是把新的图形覆盖到画布上,而是把当前已经存在的内容“擦掉”——更准确地说,它处理的是 alpha 透明通道,而不是直接修改颜色值。所以,这类效果的本质重点不在“怎么画上去”,而在“如何擦除掉”。

一、基础画布与遮罩层准备

Canvas 刮刮乐的本质逻辑是:底层先展示奖品内容(文字或图片),上层再覆盖一层不透明的遮罩色块(例如灰色、银色或黑色),用户手指或鼠标划过后,通过擦除顶层来露出下方内容。因此在实现时需要确保:

  • 底层内容(奖品信息)先完成绘制,并且不能被后续擦除操作影响;
  • 遮罩层需要单独绘制在顶层,通常使用纯色且不透明度为 1;
  • 擦除操作只作用于遮罩层本身,不能误伤底层内容。

二、设置擦除模式的关键代码

在执行 Canvas 擦除之前,必须先正确切换合成模式,并同步设置好绘图样式:

  • 调用 ctx.globalCompositeOperation = "destination-out"
  • 设置 ctx.fillStylectx.strokeStyle 为任意不透明颜色(实际生效的是 alpha,颜色本身通常无关紧要);
  • 如果使用 fillRectfill() 来擦除,需确保路径闭合或擦除区域定义明确;
  • 擦除完成后,建议及时恢复默认合成模式:ctx.globalCompositeOperation = "source-over",以免影响后续正常绘制。

三、支持鼠标和触摸的擦除逻辑

如果要让刮刮乐或橡皮擦效果同时兼容 PC 端和移动端,就需要同时监听 mousedown/mousemove/mouseuptouchstart/touchmove/touchend,并统一坐标计算方式:

  • 获取事件坐标时,建议使用 getBoundingClientRect() 计算相对于 canvas 画布的真实偏移;
  • 触摸事件通常读取 touches[0],鼠标事件则读取 clientX/Y
  • 推荐采用“画圆擦除”的方式处理轨迹(相较直接画线更自然):在移动过程中,以当前点为中心执行 fillCircle,半径一般可设为 20~40px;
  • 开启 ctx.lineCap = "round"ctx.lineJoin = "round",可以让连续擦除轨迹更圆润、更平滑。

四、优化体验的小技巧

单纯的 Canvas 擦除效果有时会显得比较生硬,加入一些细节优化后,整体真实感和可用性会更好:

  • 擦除时可以为遮罩层增加轻微模糊效果(例如配合 shadowBlur 与同色 shadowColor),模拟橡皮擦边缘的自然虚化;
  • 可以记录用户已擦除的面积占比,达到一定阈值(例如 60%)后,自动触发“全部刮开”的动画或提示反馈;
  • 移动端要注意阻止默认行为:在 touchmove 中调用 e.preventDefault(),避免手指滑动时页面跟着滚动;
  • 如果场景对性能较敏感,可以把遮罩层单独绘制到离屏 canvas 中,主 canvas 只负责最终合成,从而降低重绘压力。

这类效果实现起来并不复杂,但有一个细节非常容易被忽略:Canvas 擦除不是“画一层白色”,而是“在上层遮罩中挖出透明区域”。只要合成模式设置正确、图层关系理清、事件坐标准确,HTML Canvas 刮刮乐和橡皮擦效果就能稳定实现。

来源:https://www.php.cn/faq/3004362.html
上一篇CSS shape-outside 对非浮动元素无效的原因解析 下一篇CSS中用calc函数实现HTML元素居中的写法与技巧
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
CSS3入门指南:常用特性解析与实战练习路径
前端开发 · 2026-09-01

CSS3入门指南:常用特性解析与实战练习路径

CSS3是现代网页开发的核心技术,涵盖圆角、阴影、渐变、过渡、动画及响应式布局等高频特性。本文梳理了CSS3的核心应用场景、分步学习路径与综合练习案例,帮助初学者快速建立从基础排版到现代交互的完整开发思路,并规避常见样式陷阱。

CSS border 边框属性详解:语法、拆分写法与常见问题排查
前端开发 · 2026-09-01

CSS border 边框属性详解:语法、拆分写法与常见问题排查

本文系统讲解CSS标准边框属性border的完整语法结构,涵盖简写与拆分写法、单边控制技巧及border-radius配合方案。针对边框不显示、元素尺寸异常等高频问题提供排查路径,帮助开发者快速掌握边框设置规范并提升界面视觉一致性。

CSS3动画属性有哪些:常用属性与用法说明
前端开发 · 2026-09-01

CSS3动画属性有哪些:常用属性与用法说明

CSS3动画主要分为transition过渡与animation关键帧两类。本文梳理常用属性、简写语法与@keyframes规则,结合悬停、入场、循环等场景给出代码示例与选型建议,帮助开发者快速写出流畅且可控的动画效果。

CSS3渐变色语法与常见用法
前端开发 · 2026-09-01

CSS3渐变色语法与常见用法

CSS3渐变色通过纯代码生成平滑颜色过渡,广泛用于按钮、横幅与卡片背景。本文系统梳理线性与径向渐变的核心语法、方向控制、停靠点设置及多层叠加技巧,提供可直接复用的场景代码,并给出兼容性策略与常见渲染异常排查方法,帮助开发者快速构建稳定、可维护的渐变样式。

CSS3手册中文版下载指南:获取渠道、筛选标准与使用建议
前端开发 · 2026-09-01

CSS3手册中文版下载指南:获取渠道、筛选标准与使用建议

寻找CSS3手册中文版下载资源时,如何判断来源可靠性、筛选高质量内容并有效使用?本文从获取渠道、版本识别、下载验收到替代方案,提供一套可执行的判断标准,帮助你快速找到适合学习或查阅的中文手册。