使用 JavaScript 在画布中获取鼠标位置

2024-02-19

我正在研究 jquery 和 html5 canvas。我想做的只是一个简单的 html5 绘图示例。当鼠标移动时,我在鼠标下方绘制红色方块。

我的代码很简单,但在获取画布内的鼠标光标位置时遇到问题。

现在,我正在使用 x=event.offsetX;来获取鼠标位置。这在 Chrome 中工作得很好,但是当涉及到 Firefox 时,它就不起作用了。我将代码更改为 x=event.layerX。但似乎layerX是我的鼠标相对于网页的位置,而不是画布的位置。因为我总是看到偏移量。

我有两个问题,第一,在 Firefox 下如何获得正确的鼠标位置是正确的。其次,我如何编写适用于 ie、firefox、chrome、safari 和 opera 的代码?

这是我的代码:

 <!doctype html />
<html><head>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $(document).ready(
 function(){

var flip = document.getElementById('flip');
    var context = flip.getContext('2d');   
context.fillStyle = "rgb(255,255,255)";   
context.fillRect(0, 0, 500, 500);

      $("a").click(function(event){alert("Thanks for visiting!");});
   $("#flip").mousemove(function(event){
      var x, y;


    x = event.layerX;
    y = event.layerY;


    //alert("mouse pos"+event.layerX );
    var flip = document.getElementById('flip');
    var context = flip.getContext('2d');   
context.fillStyle = "rgb(255,0,0)";   
context.fillRect(x, y, 5, 5);
    }
   );
  }
  );    
  </script>
  </head>  <body bgcolor="#000000"> <a href="http://jquery.com/">jQuery</a><canvas id="flip" width="500" height="500">
  This text is displayed if your browser does not support HTML5 Canvas.</canvas> </body></html>

我看到很多关于这个主题的问题,所有人都建议浏览 DOM 或使用 offsetX 和 offsetY,它们并不总是设置正确。

您应该使用 canvas API 中的函数:canvas.getBoundingClientRect()。

  function getMousePos(canvas, evt) {
    var rect = canvas.getBoundingClientRect();
    return {
      x: evt.clientX - rect.left,
      y: evt.clientY - rect.top
    };
  }

  canvas.addEventListener('mousemove', function(evt) {
    var mousePos = getMousePos(canvas, evt);
    console.log('Mouse position: ' + mousePos.x + ',' + mousePos.y);
  }, false);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JavaScript 在画布中获取鼠标位置 的相关文章

  • 一个文本区域中的文本应复制到另一个文本区域,并且应使用 JavaScript 单击按钮清除原始文本区域

    我已经完成了以下代码 它显示两个文本区域 其中一个文本区域中的文本通过使用 javascript 单击按钮复制到另一个文本区域
  • Jquery 动画与 CSS 浮动

    我的代码有问题 宽度似乎可以工作 但浮动没有 这里是 这是一个例子 http jsfiddle net v82ck http jsfiddle net v82ck 问题 悬停时菜单上的浮动属性不会改变 我希望每个菜单元素下方的线在悬停该菜单
  • 大小相同的表格单元格填充包含表格的整个宽度

    有没有办法使用 HTML CSS 具有相对大小调整 使一行单元格拉伸其所在表格的整个宽度 单元格的宽度应该相等 并且外表的大小也是动态的 table width 100 目前如果我不指定固定大小 单元格只是自动调整大小以适应其内容 您甚至不
  • 对 JavaScript 中的 while 循环感到困惑

    我可能在这里有点厚重 但请回答我这个问题 考虑以下代码 a 1 while a lt 6 console log a a 如果我运行这个 我会在控制台中得到从 1 到 6 的值 然后是另一个 6 现在看看这个 a 1 while a lt
  • 如何在网格视图的单元格中插入换行符?

    我想知道如何在网格视图的单元格中添加换行符 现在 我把 1 1 1 然而 这呈现为 1 1 1 如何修复换行符 以便每个数字显示在自己的行上 Add HtmlEncode False to asp BoundField并且在正文中 应该有
  • IE 9 的子元素不透明,我无法使用 captify 阻止它

    好的 我正在使用一段名为 Captify 的 javascript 它为您的图像添加了一个带有文本的小弹出窗口 适用于所有接受 IE9 的浏览器 IE9 会淡化弹出 div 中的所有内容 我已阅读其子元素问题 但无法修复它 由于在网上任何地
  • JavaScript 中的常用数字

    在我的任务中 我必须编写一个程序来查找数组中最常见的数字以及它重复的次数 我写了一些东西 但只打印最大重复次数 所以我的问题是如何打印这个元素的值 最大数量 在我的例子中是 4 var array 13 4 1 1 4 2 3 4 4 1
  • 是否可以用 json 进行表达式/计算?

    我使用出色的 json server 作为应用程序的后端 它对于访问自定义端点以检索一些数据非常有用 但是如果它允许我进行计算 表达式以便我也可以模仿后端行为 那将会非常有用 以这个数据结构为例 products name football
  • GeoJSON 要素坐标未显示在 OpenLayers 地图上

    我正在尝试显示一个GeoJSON地图上的多边形 我使用了 OpenLayers 提供的示例以及以下数据 但仅显示第二个多边形 var geojsonObject type FeatureCollection crs type name fe
  • 嵌套对象的 AJV 模式验证

    函数返回的对象看起来像这样 answer vehicle type 1 message Car model VW color red 答案 对象始终存在 其他字段基于 vehicle type E g 如果vehicle type 1 则有
  • Firefox OS 后台服务

    我想构建一个应用程序 用户可以通过它输入一些设置 并且应用程序将启动后台服务来根据这些设置执行一些任务 我只想在模拟器中运行应用程序和后台服务 我知道它需要 认证 模式才能运行后台服务 但我现在不考虑在 Firefox Marketplac
  • 当脚本是从加载的脚本动态创建的 DOM 节点时,脚本 onload 和 window.onload 的顺序是否定义良好?

    File loader js function main if typeof window undefined var script window document createElement script script src https
  • 如何获取 svgElement 的比例?

    我正在研究 svg div style width 300 height 300 div
  • 单击窗口后才检测到 keydown

    在我的 Web 应用程序中 我有一个用于打开菜单的键的事件侦听器 仅当我单击页面上的任意位置后 此功能才可以正常工作 我尝试将焦点添加到窗口加载 但这仍然不会让 keydown 函数运行 直到我单击页面上的某个位置之后 有谁知道这是否可能
  • 如何在 svelte 中制作搜索过滤器

    我有两个组件在组件树中距离很远 我对如何在两者之间进行通信存有疑问 我有搜索组件 listItems 和商店 商店 svelte
  • 在javascript中定义Date.parse的格式[重复]

    这个问题在这里已经有答案了 我正在使用 Date parse 将字符串转换为 JavaScript 中的日期 但是 如果字符串看起来像 10 11 2016 它会被解释为 2016 年 10 月 11 日 我需要将其解释为 2016 年 1
  • 可选链接在 create-react-app 中不起作用

    In a create react app项目 我正在使用 babel plugin proposal optional chaining在我的 babelrc中 但是 我有这个错误 Module parse failed Unexpect
  • 如何在 Javascript 中将字符串数组转换为特定的树结构

    我从后端获取文件路径列表 它代表文件夹结构 如下所示 paths path to file1 doc path to file2 doc foo bar doc 路径的长度是任意的 为了使用文件树组件 角度2树组件 https github
  • JavaScript 数组中的负索引是否会影响数组长度?

    在javascript中我定义了一个像这样的数组 var arr 1 2 3 我也可以做 arr 1 4 现在如果我这样做 arr undefined 我也失去了对值的引用arr 1 所以对我来说 从逻辑上来说 arr 1 也是arr 但是
  • 如何逐步绘制矢量路径? (拉斐尔.js)

    如何逐步动画化矢量路径 就像它被绘制一样 换句话说 慢慢地逐像素地显示路径 我在用着Rapha l js but如果您的答案不是特定于库的 例如可能有一些通用的编程模式可以完成此类事情 我对矢量动画相当陌生 欢迎 使用直线路径很容易做到 就

随机推荐

  • Oracle的ORA_HASH是“随机的”吗?

    Ora hash 是确定性的 因为保持输入和种子恒定将产生确定的输出 但是 对于任何种子 包括默认种子 ora hash 的输出必然具有以下属性 没有任何方法可以用来预测 ORA HASH 的结果 并且成功率高于纯粹随机猜测吗 可能不会 不
  • Hibernate @Inheritance,表作为父级,视图作为子级

    我在 Hibernate 中遇到这种情况 其中两个类之间存在父子关系 但数据库中没有这种关系 因为子类代表视图 而不是表 现在的问题是 要让 Hibernate 满意继承注解 https docs oracle com javaee 7 a
  • JavaFx 图像大小调整

    我有一个 borderPane 顶部有菜单 左侧有一个网格 中间有一个图像 我希望图像的大小与边框中心相同 因为现在图像超出了我的网格 我试过这个 imageView fitWidthProperty bind box widthPrope
  • 删除 R 中选择性 NA 的有价值行[重复]

    这个问题在这里已经有答案了 我有一个像这样的数据框 1 2 abc NA NA NA NA 2 3 abd be f NA NA 4 5 NA NA NA NA NA 现在 我想删除那些包含从第 3 列开始的所有 NA 的行 我正在做这样的
  • 每2秒更换一次图片

    我积累了一点 所以如果有人有任何想法 那会很有帮助 目前该程序正在编译并运行 但我不知道如何完成它 我正在使用日食 我想做的是 当我启动程序时 每 2 秒更换 4 张不同的图片 所以如果您有任何建议 请不要害羞 这是程序 Here is t
  • MySQL 查询和数据透视表

    我的 MySQL 数据库具有以下列标题 month typeOfWork totalHours 我有兴趣根据工作类型和月份显示结果 例如 所有 typeOfWork 条目将显示在左侧第一列中 并且每个字段将汇总每列指定月份中的特定 type
  • 在 Swift 中使用 Parse 获取 Twitter 个人资料图像

    在 Swift 中没有找到任何关于此的信息 所以我问 如何使用 Parse 从 Twitter 获取已登录用户的个人资料图片 用户已经通过解析内部登录 signupController 登录 var username PFUser curr
  • Dask 数据帧并行任务

    我想从数据帧创建功能 附加列 并且我有以下许多功能的结构 遵循本文档https docs dask org en stable delayed best practices html https docs dask org en stabl
  • 有什么办法可以逃避弹性beanstalk环境变量中的“非法字符”?

    我正在尝试为 Rails 应用程序创建一个新的弹性 beanstalk 环境 并且将现有 RDS 实例的详细信息作为环境变量传递 该 RDS 实例是根据前一个 Elastic beanstalk 实例的快照创建的 但是该实例是由 Elast
  • NightwatchJS .elements 返回字符串而不是对象

    我正在使用 nightwatch 并尝试迭代元素列表 但是 当我没有获取对象或元素时 但我得到了一个字符串数组 CODE browser elements css selector ele function r browser perfor
  • Spring Repository 接口中使用 sort() 和 limit() 进行查询

    我是 Spring Data with MongoDB 的新手 希望在我的 MongoRepository 扩展接口中拥有一个自动生成的查询方法 该方法需要过滤 排序和限制 查询如下所示 created is the field I nee
  • 在 QT 中将配置设置保存到 XML 文件吗?

    我想将配置设置保存到 QT 中的 XML 文件并从那里读取它 在 QT 中执行此操作的最佳方法是什么 任何样品 想法都受到高度赞赏 Thanks 您可以使用以下方式注册您的 XML 文件格式QSettings registerFormat
  • CakePHP:验证消息不显示

    我是 cakePHP 的新手 我按照一些教程制作了一个简单的表单 在这个 html 表单上我使用了验证 现在的问题是验证正在工作 但消息没有显示我希望它显示的内容 我尝试了下面的代码 Model public validate array
  • JS - 如何提交表单 onclick 并发送提交按钮

    我需要通过按钮提交表单 这超出了 JavaSript 表单的范围
  • 使用向上/向下滑动动画显示和隐藏视图

    我有一个LinearLayout我想用一个来显示或隐藏Animation每当我改变布局的可见性时 它就会向上或向下推动布局 我见过一些样品 但没有一个适合我的需要 我已经为动画创建了两个 xml 文件 但当我更改动画的可见性时 我不知道如何
  • addClass 不适用于 iPhone Chrome

    changing navbar background color by scrolling window scroll function if this scrollTop gt 20 tab nav addClass tab scroll
  • 使用 imshow 绘制时间序列

    我试图使标题尽可能清晰 尽管我不确定它是否完全清晰 我有三个系列的数据 随时间变化的事件数量 我想做一个代表三个时间序列的子图 你会发现附件是我能想到的最好的 上一个时间序列明显较短 这就是为什么它在此处不可见的原因 我还添加了相应的代码
  • 通过单击图像显示/隐藏 div

    我希望能够单击图像来显示 隐藏 div 带有文本 我已经对一张图像进行了此操作 但我有多个图像需要切换文本 JavaScript 代码 document ready function slidingDiv hide show hide sh
  • 比较 Realm 对象列表

    我想比较 2 个 Realm 对象列表 看看它们是否相同 这是该物体的样子 class ScheduleRealm Object let scheduleList List
  • 使用 JavaScript 在画布中获取鼠标位置

    我正在研究 jquery 和 html5 canvas 我想做的只是一个简单的 html5 绘图示例 当鼠标移动时 我在鼠标下方绘制红色方块 我的代码很简单 但在获取画布内的鼠标光标位置时遇到问题 现在 我正在使用 x event offs