Vue 3 中怎么在 Canvas 画布上绑定鼠标移动与点击事件实现图形绘制

阿辰大大_6360

阿辰大大_6360

2026-09-18

341人浏览

原创

vue 3 中用 canvas 实现图形绘制需绑定鼠标/触摸事件并用 getboundingclientrect() 校准坐标,通过 currentmode 切换自由绘制、矩形拖拽或清空模式,mousemove 前 clearrect 再重绘历史图形+临时图形以避免闪烁。

vue 3 中怎么在 canvas 画布上绑定鼠标移动与点击事件实现图形绘制

在 Vue 3 中用 Canvas 实现图形绘制,核心是把鼠标事件(mousedownmousemovemouseup)与 Canvas 2D 绘图上下文(ctx)联动起来,再配合响应式状态控制绘制流程。不需要第三方库,原生 Canvas API 就够用。

绑定事件并获取准确坐标

Canvas 坐标容易受缩放、滚动或父容器 padding 影响,直接用 clientX/clientY 会偏移。推荐用 getBoundingClientRect() 计算相对画布左上角的位置:

  • setup() 中用 ref 持有 canvas 元素和 ctx
  • 监听 @mousedown 时调用 getMousePos(event) 获取起始点
  • 该函数返回 { x: event.clientX - rect.left, y: event.clientY - rect.top }

区分绘制模式:自由线 vs 矩形框

同一套事件可支持多种图形,靠 currentMode(如 'pen''rect''clear')切换逻辑:

Canvas
Canvas

在网页画布上显示并控制已连接 Mac、iOS 或 Android 节点的 HTML 内容,支持实时重载和远程操作。

下载
  • 自由绘制(画笔):按下时 beginPath() + moveTo(),移动时 lineTo() + stroke()
  • 拖拽矩形:按下记下起点 (startX, startY),移动时实时计算宽高,用 strokeRect(startX, startY, width, height) 绘制临时框;松开后存入历史数组并重绘全部
  • 清空画布:直接调用 ctx.clearRect(0, 0, canvas.width, canvas.height)

避免重复绘制与闪烁的关键操作

鼠标移动频繁触发,若每次都全量重绘,会出现抖动或残留。稳妥做法是:

  • 每次 mousemove 前先 clearRect() 清空画布
  • 紧接着重绘所有已保存的图形(比如历史矩形列表 totalRect
  • 最后叠加当前正在拖拽的临时图形(如未松开的矩形边框)
  • 不依赖 requestAnimationFrame 也能流畅,前提是清除+重绘逻辑轻量

移动端需额外处理触摸事件

如果目标包含手机端,不能只监听鼠标事件。要同时绑定:

  • @touchstart.prevent → 替代 mousedown,取 touches[0]
  • @touchmove.prevent → 替代 mousemove,注意 preventDefault() 阻止页面滚动
  • @touchend → 替代 mouseup
  • 触摸坐标同样需通过 getBoundingClientRect() 校准,不可直接用 pageX

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2003

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

4243

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

5370

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

4818

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

683

5

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

3371

6

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

2026.05.19

204

21

vue2.0和3.0区别
vue2.0和3.0区别

vue2.0和3.0区别:vue2的响应式原理是利⽤“Object.defineProperty()”对数据进⾏劫持结合发布订阅模式的⽅式来实现,vue3中使⽤了es6的proxy API对数据代理,实现对数据的监控。本专题为大家提供vue2.0和3.0区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.17

1574

5

vue3的生命周期有哪些
vue3的生命周期有哪些

vue3的生命周期:1、beforecreate;2、created;3、beforemount;4、mounted;5、beforeupdate;6、updated;7、beforedestroy;8、destroyed;9、activated;10、deactivated等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

11542

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 16.6万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.4万人学习

Vue.js 微实战--十天技能课堂
Vue.js 微实战--十天技能课堂

共18课时 | 1.6万人学习