画布鼠标事件位置与光标不同

理查德

我开始尝试使用画布,这可能是一个基本问题,但在这里找不到问题。

我的鼠标光标比我在画布上使用鼠标事件坐标绘制的线慢。我在这里想念什么?

小提琴

PS-如果使用jQuery的鼠标事件,则存在相同的问题:http : //jsfiddle.net/2q4Sd/2/

window.addEvent('mousemove', function (event) {
    draw(event.event.clientX);
});

function draw(mouseX) {
    ctx.beginPath();
    ctx.strokeStyle = "black";
    ctx.lineWidth = 1;
    ctx.moveTo(mouseX, 0);
    ctx.lineTo(mouseX, canvas.height);
    ctx.stroke();
    ctx.closePath();
}
本·杰克逊

您的画线已关闭有两个原因。两者都与event.clientXetc返回的坐标与画布使用的坐标之间的差异有关

  1. 每个画布都有其自己的坐标系,默认坐标系以canvas元素左上角的(0,0)开头。event.clientX但是相对于“客户区域”(基本上是视口,或者在iframe的情况下,它是页面上占据的区域)进行度量。因此,当您传递event.clientX到你的draw()函数,并用它来画到画布上,你不是在这两个坐标系走的是差异的帐户。为此,您可以使用类似:.getBoundingClientRect()的方法
  2. 您遇到的另一个问题是,等式返回的坐标的比例与event.clientX特定画布元素使用的坐标的比例之间可能存在差异,并且在您的情况下也存在差异我在这里讨论了这个问题:https : //stackoverflow.com/a/19079320/1937302但是,基本上,除非您有充分的理由,否则我将确保CSS设置的画布尺寸等于使用HTML属性width和进行设置height

解决这两个问题都可以:

http://jsfiddle.net/2q4Sd/8/

相关HTML:

<canvas style="width:400px;height:300px;" width="400" height="300"></canvas>

draw()功能:

function draw(mouseX) {

    // fixes offset caused by event.clientX and the canvas element
    // having different origins for their coordinate systems:
    var xCoord = mouseX - canvas.getBoundingClientRect().left;

    ctx.beginPath();
    ctx.strokeStyle = "black";
    ctx.lineWidth = 1;
    ctx.moveTo(xCoord, 0);
    ctx.lineTo(xCoord, canvas.height);
    ctx.stroke();
    ctx.closePath();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

固定位置鼠标光标

来自分类Dev

鼠标在缩放画布上的位置

来自分类Dev

鼠标在缩放画布上的位置

来自分类Dev

JavaScript 画布和鼠标位置

来自分类Dev

在鼠标光标的位置添加cytoscape节点

来自分类Dev

使鼠标光标移动到某个位置?

来自分类Dev

获取鼠标光标图像位置

来自分类Dev

在鼠标光标的位置添加cytoscape节点

来自分类Dev

Ubuntu终端-移至鼠标光标位置

来自分类Dev

无效的WPF画布鼠标上移事件

来自分类Dev

鼠标移动事件时画布闪烁

来自分类Dev

将画布缩放到鼠标位置

来自分类Dev

获取事件上的鼠标位置

来自分类Dev

“鼠标中键”粘贴到鼠标光标所在的位置

来自分类Dev

即使光标在画布之外,也会调用MouseMove事件

来自分类Dev

如何在画布中获得更多光标位置

来自分类Dev

将tkinter画布形状放置到光标位置

来自分类Dev

浏览器之间的鼠标事件光标差异

来自分类Dev

平滑预测javascript中鼠标光标的位置

来自分类Dev

如何在WPF中更改鼠标光标的指向位置

来自分类Dev

jQuery draggable / droppable不会放在鼠标光标所在的位置

来自分类Dev

将鼠标光标位置更改为焦点控件

来自分类Dev

在javascript中输入光标位置鼠标悬停

来自分类Dev

基于鼠标滚轮中光标的位置进行缩放

来自分类Dev

倒置鼠标光标和Ubuntu 18.04上的倒置位置

来自分类Dev

将鼠标光标位置设置为对象标题

来自分类Dev

将剪辑路径位置移动到鼠标光标

来自分类Dev

必应地图如何放大鼠标光标的位置?

来自分类Dev

倒置鼠标光标和Ubuntu 18.04上的倒置位置