原生JS Canvas如何绘制并拖动可调整大小的矩形?

原生js canvas如何绘制并拖动可调整大小的矩形?

使用原生JavaScript和Canvas绘制可交互矩形

本文介绍如何利用原生JavaScript和Canvas元素绘制一个可拖动和调整大小的矩形。

一、绘制矩形:

首先,我们需要使用JavaScript获取Canvas元素和其2D渲染上下文:

const canvas = document.getElementById('my-canvas');const ctx = canvas.getContext('2d');ctx.fillStyle = 'blue'; // 设置填充颜色ctx.fillRect(10, 10, 100, 50); // 绘制矩形 (x, y, width, height)

这段代码绘制了一个蓝色矩形,其左上角坐标为(10, 10),宽为100像素,高为50像素。

二、拖动矩形:

实现拖动功能需要监听鼠标事件:mousedownmousemovemouseup

Weights.gg Weights.gg

多功能的AI在线创作与交流平台

Weights.gg 3352 查看详情 Weights.gg

let isDragging = false;let startX, startY;canvas.addEventListener('mousedown', (e) => {  // 检查鼠标是否在矩形内  if (isPointInRect(e.offsetX, e.offsetY, 10, 10, 100, 50)) {    isDragging = true;    startX = e.offsetX;    startY = e.offsetY;  }});canvas.addEventListener('mousemove', (e) => {  if (isDragging) {    const dx = e.offsetX - startX;    const dy = e.offsetY - startY;    // 清除画布并重新绘制矩形    ctx.clearRect(0, 0, canvas.width, canvas.height);    ctx.fillRect(10 + dx, 10 + dy, 100, 50);    startX = e.offsetX;    startY = e.offsetY;  }});canvas.addEventListener('mouseup', () => {  isDragging = false;});//辅助函数,判断点是否在矩形内function isPointInRect(x, y, rectX, rectY, rectWidth, rectHeight) {  return x >= rectX && x = rectY && y <= rectY + rectHeight;}

这段代码添加了鼠标事件监听器。mousedown事件检测鼠标是否点击在矩形内,如果是则开始拖动;mousemove事件计算矩形位移并重新绘制;mouseup事件结束拖动。

三、调整矩形大小:

为了调整矩形大小,我们可以监听dblclick事件,并根据点击位置调整矩形的宽高。 这部分实现较为复杂,需要判断点击位置是哪个边或角,然后进行相应的调整。为了简化,这里省略了这部分代码,但可以参考文中提到的Fabric.js库来实现更高级的功能。

四、总结:

以上代码展示了使用原生JavaScript和Canvas绘制可拖动矩形的核心步骤。 对于更复杂的交互和功能,例如调整大小、旋转等,建议使用Fabric.js等Canvas库,它们提供了更便捷的API和更丰富的功能。

以上就是原生JS Canvas如何绘制并拖动可调整大小的矩形?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1146898.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Mysql安装和环境变量设置及破解密码
上一篇 2025年12月2日 19:06:36
《剑啸九州》会是现在的3D玄幻武侠巅峰吗?
下一篇 2025年12月2日 19:06:41

相关推荐

  • 如何利用WebSocket技术实时显示医学数据波形图,例如心电图?

    基于WebSocket技术实现实时医学数据可视化 在医疗应用中,实时监测和显示生理数据(如心电图、体温曲线)至关重要。本文将介绍如何利用WebSocket技术结合前端绘图库,实现实时数据获取和波形图绘制,例如模拟心电图显示。 需求分析: 用户希望通过WebSocket接收实时医学数据(例如心率),并…

    2026年9月1日
    000
  • Python环境安装教程

    Python环境安装教程Python环境安装教程Python环境安装教程Python环境安装教程

    引言 通常我们将#%#$#%@%@%$#%$#%#%#$%@_23eeeb4347bdd26bfc++6b7ee9a3b755dd和java语言归为解释型语言,而对于c/c++则归为编译型语言。 安装Python解释器最新版本下载 官网下载(https://www.Python.org/) 选择最新…

    2026年9月1日 用户投稿
    200
  • MySQL的Explain执行计划怎么看_关键指标如何理解?

    MySQL的Explain执行计划怎么看_关键指标如何理解?MySQL的Explain执行计划怎么看_关键指标如何理解?MySQL的Explain执行计划怎么看_关键指标如何理解?MySQL的Explain执行计划怎么看_关键指标如何理解?

    mysql的explain执行计划用于分析sql语句的执行方式,帮助优化查询性能。1. id字段表示执行顺序,值越大优先级越高;2. select_type表示查询类型,如simple、primary、subquery等;3. type显示查找方式,最佳为const、eq_ref,最差为all;4.…

    2026年9月1日 用户投稿
    100
  • Java中finally块的作用是什么 无论是否抛出异常都会执行吗

    finally块确保代码在try-catch结构中无论是否发生异常都会执行,常用于释放资源;2. 多数情况下finally会执行,包括无异常、有异常被捕获、甚至try或catch中有return语句时;3. 但在System.exit()被调用、线程被强制终止或JVM崩溃等极端情况下,finally…

    2026年9月1日
    000
  • 曝iPhone17屏幕大升级!苹果史上最大标准版iPhone诞生

    科技资讯平台 gsmarena 于昨日(6 月 23 日)发布文章,展示了一张来自亚马逊商城的截图,显示配件品牌 spigen 已经上架了多款适配苹果 iphone 17 系列的屏幕保护膜,从这些贴膜的规格信息来看,似乎表明标准版 iphone 17 的屏幕尺寸将提升至 6.3 英寸。 说明:在 i…

    2026年9月1日
    100
  • 怎么用VSCode运行代码_VSCode代码执行与调试教程

    VSCode中运行和调试代码的核心方法包括:1. 使用内置终端手动执行命令,灵活但需重复输入;2. 通过Code Runner插件一键运行,快捷但功能有限;3. 借助语言扩展与调试器深度调试,支持断点、变量监控、调用堆栈等高级功能,适合复杂项目。配置时需安装对应语言扩展、设置解释器路径、合理使用se…

    2026年9月1日
    000
  • 马斯克计划重写人类知识库!吐槽网上垃圾信息过剩!

    近日,科技界领军人物埃隆·马斯克公布了一项震撼业界的宏伟蓝图——他计划对人类全部知识体系进行重构。 在社交平台X发布的最新动态中,马斯克透露,其旗下开发的新一代人工智能系统Grok 3.5(也可能命名为Grok 4)将全面介入人类知识库的重塑工程,填补信息空白、清除错误内容,并基于更新后的知识结构重…

    2026年9月1日
    000
  • 荣耀Magic V5搭载行业最强AI智能体 一句话可生成PPT

    荣耀Magic V5搭载行业最强AI智能体 一句话可生成PPT荣耀Magic V5搭载行业最强AI智能体 一句话可生成PPT荣耀Magic V5搭载行业最强AI智能体 一句话可生成PPT荣耀Magic V5搭载行业最强AI智能体 一句话可生成PPT

    7月2日晚,荣耀正式发布了全新旗舰折叠屏手机——荣耀magic v5。该机不仅配备了顶级的硬件规格,还搭载了业内领先的ai智能体,全面拓展了智能手机的功能边界。 成品ppt在线生成,百种模板可供选择☜☜☜☜☜点击使用; 在硬件方面,荣耀Magic V5采用了高通骁龙8至尊版处理器,配备一块6.43英…

    2026年9月1日 用户投稿
    200
  • TOMG-Bench:大语言模型开放域分子生成新基准

    TOMG-Bench:大语言模型开放域分子生成新基准TOMG-Bench:大语言模型开放域分子生成新基准TOMG-Bench:大语言模型开放域分子生成新基准TOMG-Bench:大语言模型开放域分子生成新基准

    TOMG-Bench:评估大语言模型开放域分子生成能力的新基准 科学家们开发了一个新的基准测试——tomg-bench,用于评估大型语言模型 (llm) 在分子领域的开放域生成能力。该基准测试旨在弥补现有分子-文本数据集的不足,更准确地评估 llm 在实际分子设计中的应用潜力。 ☞☞☞AI 智能聊天…

    2026年9月1日 用户投稿
    000
  • 高德鹰眼守护需要哪些权限_高德鹰眼守护所需权限全面分析

    为确保高德地图“鹰眼守护”正常运行,需开启三项关键权限:一、位置信息权限,设置为始终允许以支持实时数据采集与异常分析;二、后台运行与自启动权限,避免因系统限制导致预警延迟,需在电池管理及厂商安全中心中将高德地图加入白名单;三、通知与声音提醒权限,确保通知开启并设为优先级别,同时在APP内启用语音提醒…

    2026年9月1日
    000
  • Vue3项目中如何解决npm包“alice-player”集成失败的问题?

    Vue3项目中集成alice-player包的挑战与解决方案 在Vue3项目开发中,引入第三方npm包是常见操作,但有时会遇到集成难题。本文以alice-player包为例,探讨如何解决“npm包缺乏Vue3集成文档,自行尝试集成失败”的问题。 问题:alice-player包仅提供HTML调用方式…

    2026年9月1日
    000
  • 网友从 Win XP 泄露源码发现的隐藏功能和趣味细节

    网友从 Win XP 泄露源码发现的隐藏功能和趣味细节网友从 Win XP 泄露源码发现的隐藏功能和趣味细节网友从 Win XP 泄露源码发现的隐藏功能和趣味细节网友从 Win XP 泄露源码发现的隐藏功能和趣味细节

    代号为 whistler 的首个 windows xp 版本,已有近 20 年的历史。然而,最近 twitter 用户 albacore 分享了一些来自 windows xp 泄露代码的隐藏功能。通过调整特定的注册表项目,你可以解锁一些有趣的视图,并体验到此前未曾见过的功能。 首先,如上图所示的“开…

    2026年9月1日 用户投稿
    100
  • 深度求索官网地址

    深度求索官网地址入口在哪里?这是不少网友都关注的问题,接下来由php小编为大家带来深度求索ai官网入口,感兴趣的网友一起随小编来瞧瞧吧! 深度求索官网地址 1、深度求索官网地址☜☜☜☜☜点击保存 2、深度求索ai官网入口☜☜☜☜☜点击保存 【深度求索deepseek】 1、深耕AGI领域:不同于业务…

    2026年9月1日
    000
  • AI整理文档怎么高效_使用ChatGPT进行文档摘要与归类

    答案是利用ChatGPT高效整理文档需明确目标并分解任务,通过准备文本、设计精准Prompt、迭代优化及整合结果,结合背景信息、示例引导和自动化脚本提升摘要准确性与批量归类效率,并可拓展至翻译、校对、生成等应用。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek…

    2026年9月1日
    000
  • 如何使用Composer解决WordPress安装和更新的复杂性问题

    Composer在线学习地址:学习地址 在管理 wordpress 网站时,常常会遇到一些让人头疼的问题:如何快速安装 wordpress?如何轻松更新到最新版本?如何将单站点转换为多站点?这些操作不仅耗时,而且容易出错,导致网站瘫痪。 最近,我在管理一个 WordPress 网站时,遇到了这些问题…

    用户投稿 2026年9月1日
    100
  • Tkinter Frame

    frame 是一种在 windows 上用于分隔小区域的组件,它可以将窗口划分为不同的区域,并在这些区域中放置其他组件。此外,一个 frame 还可以进一步分割成两个或多个 frame,可以将其视为一种容器。 效果 代码语言:javascript代码运行次数:0运行复制“`javascr…

    2026年9月1日
    100
  • Spring Boot单元测试启动失败:@SpringBootTest注解失效的原因是什么?

    Spring Boot单元测试启动失败排查:@SpringBootTest注解失效原因分析 在使用Spring Boot进行单元测试时,@SpringBootTest注解通常用于启动完整的Spring上下文环境,方便测试。然而,有时会遇到启动失败的情况。本文分析“使用@SpringBootTest进…

    2026年9月1日
    000
  • Git提交前检查脚本失效了,如何排查?

    排查Git提交前检查脚本失效 使用pre-commit库进行Git提交前代码检查时,有时预期的检查脚本无法执行。本文分析pre-commit钩子失效的原因,并提供解决方案。 问题描述: 自定义检查脚本在执行git commit命令后未执行。package.json文件配置了pre-commit钩子,…

    2026年9月1日
    100
  • Git pre-commit钩子失效了,该如何排查?

    Git提交前代码检查:pre-commit钩子失效原因分析及解决方法 许多开发者依赖pre-commit库在代码提交前进行自动化检查,确保代码质量和规范性。然而,pre-commit钩子偶尔会失效,本文将分析一个实际案例,并提供排查步骤。 问题:开发者使用pre-commit库,在package.j…

    2026年9月1日
    100
  • 2025款腾势N7上市 搭载天神之眼B+云辇A 25.98万元起

    2025款腾势N7上市 搭载天神之眼B+云辇A 25.98万元起2025款腾势N7上市 搭载天神之眼B+云辇A 25.98万元起2025款腾势N7上市 搭载天神之眼B+云辇A 25.98万元起2025款腾势N7上市 搭载天神之眼B+云辇A 25.98万元起

    2025款腾势n7正式上市,售价区间为25.98万元-28.98万元,共推出三个版本。新车精简配置,入门即享长续航和高级智能驾驶辅助系统。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 腾势N7全系标配五大核心配置:智能底盘、高级智能驾驶辅…

    2026年9月1日 用户投稿
    100

发表回复

登录后才能评论
关注微信