javascript - 光标不跟随在html5 Canvas 中绘制的矩形的位置

标签 javascript jquery html canvas

我有这段代码,可以让我在 Canvas 上绘制矩形: https://jsfiddle.net/6u7bLkwc/4/

要在 Canvas 上绘制矩形,请单击图像,然后拖动鼠标。

要重现我的问题,请按照以下步骤操作:

  • 像上面提到的那样绘制一个矩形。
  • 然后点击“添加文本”按钮。
  • 现在尝试绘制另一个矩形,您会发现光标与矩形的位置不同。

即使我动态添加或删除页面上的任何元素,如何使我的代码正常工作?

我尝试这样做:

var shape = new Shape(mouseDownX - canvasOffset.left, mouseDownY - canvasOffset.top, mouseX - mouseDownX, mouseY - mouseDownY, color);

但没有解决。

诸如更新新职位之类的事情可以解决它,但不知道如何处理。

最佳答案

在这里检查解决方案:https://jsfiddle.net/6u7bLkwc/9/

问题是您没有计算相对于 Canvas 位置的 PageX 和 PageY,而是计算相对于整个页面的 PageX 和 PageY,这给了您错误的坐标。

我刚刚更改了这些:

mouseDownX = e.pageX;
mouseDownY = e.pageY;

对此:

mouseDownX = e.pageX - this.offsetLeft;
mouseDownY = e.pageY - this.offsetTop;

更新

对于其他一些情况,您应该只在 Canvas 上使用 getBoundingClientRect() 方法来获取相对于视口(viewport)的元素位置,如以下 jsfiddle 显示 sfiddle.net/dkboaq7p/2

//获取元素的相对位置

var canvasPosition=document.getElementById("canvas").getBoundingClientRect();

  mouseDownX =  e.pageX - canvasPosition.left;
  mouseDownY =  e.pageY - canvasPosition.top;

关于javascript - 光标不跟随在html5 Canvas 中绘制的矩形的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40984483/

相关文章:

html - bootstrap html中的两条虚线

javascript - 如何拥有可变数量的 Bluebird promise ? ( Node )

javascript - 使用 jQuery 的 each() 在 JavaScript 中更清晰(嵌套)的闭包

javascript - 如何制作多个嵌套对象的数组?

javascript - 如何使用 jQuery 在两个类之间切换?

html - 选择标签的标签标签有什么意义?

javascript - Excel 图表到 JavaScript

javascript - jquery html() 的问题

javascript - JQuery - 显示/隐藏样式属性覆盖 css

javascript - 使用 AngularJS 从两个不同的 $scopes 添加数字