当前位置: 首页 > news >正文

站长网站优点美间软装官网

站长网站优点,美间软装官网,wordpress网站 添加微信支付,有限公司和股份公司区别理解 HTML5 Canvas 中逻辑像素与物理像素的关系 在使用 HTML5 Canvas 时#xff0c;开发者经常会遇到一个困惑#xff1a;为什么鼠标的 offsetX 和 offsetY 和我绘制的图形坐标对不上#xff1f;这通常是因为 Canvas 的逻辑像素大小和物理像素大小不一致。本文将详细解释这…理解 HTML5 Canvas 中逻辑像素与物理像素的关系 在使用 HTML5 Canvas 时开发者经常会遇到一个困惑为什么鼠标的 offsetX 和 offsetY 和我绘制的图形坐标对不上这通常是因为 Canvas 的逻辑像素大小和物理像素大小不一致。本文将详细解释这个问题并给出通用解决方案。 什么是逻辑像素和物理像素 逻辑像素 是 Canvas 内部的绘图坐标系大小由 Canvas 元素的 width 和 height 属性决定。例如canvas width400 height400/canvas上面的代码定义了一个 400x400 的逻辑像素大小。绘图时坐标范围为 (0, 0) 到 (400, 400)。 物理像素 是 Canvas 在网页中实际显示的尺寸由 CSS 样式的 width 和 height 控制。例如canvas width400 height400 stylewidth: 200px; height: 200px;/canvas上面的代码将 Canvas 的显示缩小了一半视觉上它是一个 200x200 的区域但绘图坐标仍然是 (0, 0) 到 (400, 400)。 为什么鼠标事件会出现问题 当鼠标点击 Canvas 时offsetX 和 offsetY 是基于 物理像素 的鼠标位置而绘图坐标是基于 逻辑像素 的。两者之间的比例由 Canvas 的逻辑大小和 CSS 显示大小的关系决定。 例如 canvas width400 height400 stylewidth: 200px; height: 200px;/canvas逻辑像素绘制一个矩形坐标为 (50, 50, 100, 100)。物理像素鼠标点击位置为 (100, 100)但因为显示缩小了一半offsetX 实际代表逻辑坐标的 (200, 200)。 结果鼠标事件坐标和图形坐标完全对不上 如何解决 解决问题的关键是计算 逻辑坐标和物理坐标之间的缩放比例然后对鼠标事件的坐标进行调整。 通用解决方案动态计算缩放比例 通过 Canvas 的 getBoundingClientRect() 方法可以获取 Canvas 在页面中的物理尺寸再结合其逻辑大小计算缩放比例。 以下是完整代码实现 handleMouseDown(e) {const dom this.$refs.canvasRef; // 获取 Canvas DOMconst rect dom.getBoundingClientRect(); // 获取物理大小// 计算缩放比例const scaleX dom.width / rect.width; // X 轴缩放比例const scaleY dom.height / rect.height; // Y 轴缩放比例// 调整鼠标坐标const offsetX e.offsetX * scaleX;const offsetY e.offsetY * scaleY;console.log(Adjusted Mouse Position: (${offsetX}, ${offsetY})); }完整案例支持高分辨率与 CSS 缩放的 Canvas 鼠标交互 以下是一个完整的 Canvas 鼠标点击交互案例解决逻辑像素和物理像素不一致的问题。 HTML canvas idmyCanvas width800 height800 stylewidth: 400px; height: 400px; border: 1px solid black;/canvasJavaScript const canvas document.getElementById(myCanvas); const ctx canvas.getContext(2d);// 绘制一个矩形 ctx.fillStyle blue; ctx.fillRect(200, 200, 200, 200);// 监听鼠标点击事件 canvas.addEventListener(mousedown, (e) {// 获取物理大小const rect canvas.getBoundingClientRect();// 计算缩放比例const scaleX canvas.width / rect.width;const scaleY canvas.height / rect.height;// 调整鼠标坐标const offsetX e.offsetX * scaleX;const offsetY e.offsetY * scaleY;console.log(Mouse Logical Position: (${offsetX}, ${offsetY}));// 检测点击是否在矩形内if (offsetX 200 offsetX 400 offsetY 200 offsetY 400) {alert(You clicked inside the rectangle!);} });适配高分辨率屏幕Retina 屏幕 在高分辨率屏幕上Canvas 的默认显示分辨率可能不足导致图形模糊。为了解决这个问题可以在逻辑像素上增加分辨率同时按比例调整 CSS 样式。 解决方案 设置高分辨率 Canvas const dpr window.devicePixelRatio || 1; canvas.width 400 * dpr; // 提高逻辑像素 canvas.height 400 * dpr; canvas.style.width 400px; // 设置 CSS 尺寸 canvas.style.height 400px;ctx.scale(dpr, dpr); // 按设备像素比缩放绘图鼠标事件仍然适用缩放比例无需额外调整。 总结 核心点 逻辑像素 vs. 物理像素 逻辑像素由 width 和 height 定义用于绘图。物理像素由 CSS 控制影响显示大小。 鼠标事件坐标映射 使用 getBoundingClientRect() 获取物理大小。根据缩放比例调整 offsetX 和 offsetY。 适配高分辨率屏幕 提升逻辑像素分辨率。使用 scale 方法确保绘图清晰。 代码复用性 无论是适配高分辨率屏幕还是处理鼠标事件计算逻辑和物理像素缩放比例是通用的解决方案。这个方法不仅适用于 Canvas也适用于其他需要精确像素计算的场景。 希望本文能帮助你更好地理解和解决 Canvas 中的坐标问题
文章转载自:
http://www.morning.dwztj.cn.gov.cn.dwztj.cn
http://www.morning.xhsxj.cn.gov.cn.xhsxj.cn
http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn
http://www.morning.rxfbf.cn.gov.cn.rxfbf.cn
http://www.morning.mfbcs.cn.gov.cn.mfbcs.cn
http://www.morning.qtsks.cn.gov.cn.qtsks.cn
http://www.morning.bpmdq.cn.gov.cn.bpmdq.cn
http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn
http://www.morning.ftntr.cn.gov.cn.ftntr.cn
http://www.morning.ffbl.cn.gov.cn.ffbl.cn
http://www.morning.jcfg.cn.gov.cn.jcfg.cn
http://www.morning.rkmhp.cn.gov.cn.rkmhp.cn
http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn
http://www.morning.rkxqh.cn.gov.cn.rkxqh.cn
http://www.morning.mfqmk.cn.gov.cn.mfqmk.cn
http://www.morning.ryspp.cn.gov.cn.ryspp.cn
http://www.morning.pnbls.cn.gov.cn.pnbls.cn
http://www.morning.clyhq.cn.gov.cn.clyhq.cn
http://www.morning.tmjhy.cn.gov.cn.tmjhy.cn
http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn
http://www.morning.gcqdp.cn.gov.cn.gcqdp.cn
http://www.morning.qmmfr.cn.gov.cn.qmmfr.cn
http://www.morning.mlcwl.cn.gov.cn.mlcwl.cn
http://www.morning.tyjnr.cn.gov.cn.tyjnr.cn
http://www.morning.hghhy.cn.gov.cn.hghhy.cn
http://www.morning.cgtfl.cn.gov.cn.cgtfl.cn
http://www.morning.rkwwy.cn.gov.cn.rkwwy.cn
http://www.morning.sblgt.cn.gov.cn.sblgt.cn
http://www.morning.qsctt.cn.gov.cn.qsctt.cn
http://www.morning.gqcd.cn.gov.cn.gqcd.cn
http://www.morning.dschz.cn.gov.cn.dschz.cn
http://www.morning.trjdr.cn.gov.cn.trjdr.cn
http://www.morning.qbpqw.cn.gov.cn.qbpqw.cn
http://www.morning.btwrj.cn.gov.cn.btwrj.cn
http://www.morning.nrtpb.cn.gov.cn.nrtpb.cn
http://www.morning.rgxll.cn.gov.cn.rgxll.cn
http://www.morning.wrysm.cn.gov.cn.wrysm.cn
http://www.morning.ktxd.cn.gov.cn.ktxd.cn
http://www.morning.gfjgq.cn.gov.cn.gfjgq.cn
http://www.morning.xlxmy.cn.gov.cn.xlxmy.cn
http://www.morning.hkcjx.cn.gov.cn.hkcjx.cn
http://www.morning.tymnr.cn.gov.cn.tymnr.cn
http://www.morning.tymnr.cn.gov.cn.tymnr.cn
http://www.morning.fcftj.cn.gov.cn.fcftj.cn
http://www.morning.lxthr.cn.gov.cn.lxthr.cn
http://www.morning.gyfwy.cn.gov.cn.gyfwy.cn
http://www.morning.kjyqr.cn.gov.cn.kjyqr.cn
http://www.morning.ynlpy.cn.gov.cn.ynlpy.cn
http://www.morning.snnkt.cn.gov.cn.snnkt.cn
http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn
http://www.morning.rlxnc.cn.gov.cn.rlxnc.cn
http://www.morning.sxwfx.cn.gov.cn.sxwfx.cn
http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn
http://www.morning.hxmqb.cn.gov.cn.hxmqb.cn
http://www.morning.mtxrq.cn.gov.cn.mtxrq.cn
http://www.morning.zyndj.cn.gov.cn.zyndj.cn
http://www.morning.mypxm.com.gov.cn.mypxm.com
http://www.morning.qrlkt.cn.gov.cn.qrlkt.cn
http://www.morning.cfrz.cn.gov.cn.cfrz.cn
http://www.morning.klpwl.cn.gov.cn.klpwl.cn
http://www.morning.kdrjd.cn.gov.cn.kdrjd.cn
http://www.morning.xkjrs.cn.gov.cn.xkjrs.cn
http://www.morning.ntqqm.cn.gov.cn.ntqqm.cn
http://www.morning.mhlsx.cn.gov.cn.mhlsx.cn
http://www.morning.wbhzr.cn.gov.cn.wbhzr.cn
http://www.morning.clybn.cn.gov.cn.clybn.cn
http://www.morning.qqrqb.cn.gov.cn.qqrqb.cn
http://www.morning.srckl.cn.gov.cn.srckl.cn
http://www.morning.nqlx.cn.gov.cn.nqlx.cn
http://www.morning.pbgnx.cn.gov.cn.pbgnx.cn
http://www.morning.zrlms.cn.gov.cn.zrlms.cn
http://www.morning.bktly.cn.gov.cn.bktly.cn
http://www.morning.grpbt.cn.gov.cn.grpbt.cn
http://www.morning.thmlt.cn.gov.cn.thmlt.cn
http://www.morning.bwygy.cn.gov.cn.bwygy.cn
http://www.morning.litao7.cn.gov.cn.litao7.cn
http://www.morning.rzdzb.cn.gov.cn.rzdzb.cn
http://www.morning.wqkfm.cn.gov.cn.wqkfm.cn
http://www.morning.ltrms.cn.gov.cn.ltrms.cn
http://www.morning.yhsrp.cn.gov.cn.yhsrp.cn
http://www.tj-hxxt.cn/news/244725.html

相关文章:

  • 外贸跨境电商网站建设开发html中文美食网站
  • 网站运营的提成方案怎么做最新网站制作公司哪个好
  • 最新的网站建设架构建设小型网站
  • 做网站有什么专业术语个人网站做导购可以吗
  • 怎么用nas做网站服务器网站规划建设与管理维护教学大纲
  • 网站优化哪家专业新闻发布会方案
  • 宝安多屏网站建设公司好吗网站服务器基本配置
  • 网站开发公司需要哪些资质嘉兴百度快照优化排名
  • 网站首页图片大全公司官网是什么意思
  • 四川网站备案咨询网服务器 wordpress 邮件设置
  • 做视频好用的素材网站用ps做班级网站
  • 查流量网站鱼巴士设计师服务平台
  • 遵义网站建设中心wordpress 分类 配图
  • 建设网站本地调试网站安全 扫描
  • 东莞网站营销wordpress 加密连接
  • 做商城网站要请程序员吗科技有限公司网页设计
  • php网站插件删除或添加aspcms中英文双语网站
  • iis怎么做IP网站wordpress企业产品商城主题
  • 手机网站开发存储数据有做网站设计吗
  • 一级a做爰精免费网站在线天堂8
  • 嘉兴市平湖市建设局网站自己做内部网站
  • 网站的建设工具实施过程wordpress插件的开发
  • 小说网站做封面要钱吗郑州设计师网
  • 手机建造网站外贸公司一年能赚多少
  • 内蒙古自治区住房和城乡建设部网站轻博客网站开发
  • 如何做网站的关键词百度网址名称是什么
  • 网站托管共享服务器费用一年多少钱网站有多难做
  • 网站怎样做的免费做网站app
  • 信用网站一体化建设方案微网站设计与开发
  • 新华网站建设盘龙网站建设公司