【canvas】实现画布橡皮擦功能、并解决擦除不连贯问题;

2024-02-09 13:20

本文主要是介绍【canvas】实现画布橡皮擦功能、并解决擦除不连贯问题;,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 简单介绍橡皮擦功能思路,代码demo自己看看就好了,一点都不复杂:

  1. 确认橡皮擦大小,可动态设置;
  2. 鼠标按下记录点击的坐标,然后根据设置的橡皮擦大小画一个圆,最后清除该圆形区域坐标范围的颜色信息;然后创建鼠标移动事件;
  3. 按下后鼠标移动过程中对移动的轨迹坐标进行清除颜色信息。
  4. 移动过程中,为了解决鼠标移动事件响应是有时间间隔的,导致正常情况下鼠标快速移动时出现橡皮擦擦除颜色不连贯的问题,为此需要每次擦除需记录上个坐标点,然后对当前坐标点连起来,连起来的范围就是要擦除的坐标范围;
  5. 鼠标松开销毁移动事件;
  6. 没有6了兄弟,功能就是这么简单;
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><style>* {box-sizing: border-box;margin: 0;padding: 0;}#c {position: absolute;width: 800px;height: 600px;top: 0;left: 0;border: 1px solid black;}#background {font-size: 40px;width: 800px;height: 600px;user-select: none;overflow: hidden;}</style></head><body><div id="background">这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图,这是底图</div><canvas id="c" width="800" height="600"></canvas><div><button id="hehe">爱尔奎特</button></div><script>const eraserWidth = 30;var ctx = c.getContext("2d");ctx.fillStyle = "#336699";ctx.fillRect(0, 0, c.width, c.height);ctx.globalCompositeOperation = "destination-out";let beginP = { x: 0, y: 0 };c.onmousedown = function (e) {beginP.x = e.offsetX;beginP.y = e.offsetY;ctx.beginPath();ctx.arc(beginP.x, beginP.y, eraserWidth / 2, 0, Math.PI * 2);ctx.fill();ctx.closePath();c.onmousemove = function (e) {var tx = e.offsetX;var ty = e.offsetY;ctx.beginPath();ctx.lineJoin = ctx.lineCap = "round";ctx.lineWidth = eraserWidth;ctx.moveTo(beginP.x, beginP.y);ctx.lineTo(tx, ty);ctx.closePath();ctx.stroke();beginP.x = tx;beginP.y = ty;};};c.onmouseup = function () {c.onmousemove = "null";};</script></body>
</html>

这篇关于【canvas】实现画布橡皮擦功能、并解决擦除不连贯问题;的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/694336

相关文章

linux报错INFO:task xxxxxx:634 blocked for more than 120 seconds.三种解决方式

《linux报错INFO:taskxxxxxx:634blockedformorethan120seconds.三种解决方式》文章描述了一个Linux最小系统运行时出现的“hung_ta... 目录1.问题描述2.解决办法2.1 缩小文件系统缓存大小2.2 修改系统IO调度策略2.3 取消120秒时间限制3

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

Java实现Excel与HTML互转

《Java实现Excel与HTML互转》Excel是一种电子表格格式,而HTM则是一种用于创建网页的标记语言,虽然两者在用途上存在差异,但有时我们需要将数据从一种格式转换为另一种格式,下面我们就来看看... Excel是一种电子表格格式,广泛用于数据处理和分析,而HTM则是一种用于创建网页的标记语言。虽然两

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

关于@MapperScan和@ComponentScan的使用问题

《关于@MapperScan和@ComponentScan的使用问题》文章介绍了在使用`@MapperScan`和`@ComponentScan`时可能会遇到的包扫描冲突问题,并提供了解决方法,同时,... 目录@MapperScan和@ComponentScan的使用问题报错如下原因解决办法课外拓展总结@

使用Python实现在Word中添加或删除超链接

《使用Python实现在Word中添加或删除超链接》在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能,本文将为大家介绍一下Python如何实现在Word中添加或... 在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超

MybatisGenerator文件生成不出对应文件的问题

《MybatisGenerator文件生成不出对应文件的问题》本文介绍了使用MybatisGenerator生成文件时遇到的问题及解决方法,主要步骤包括检查目标表是否存在、是否能连接到数据库、配置生成... 目录MyBATisGenerator 文件生成不出对应文件先在项目结构里引入“targetProje

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr