【问题标题】:How to calculate mouse move distance from specify offset如何从指定偏移量计算鼠标移动距离
【发布时间】:2013-11-08 15:20:41
【问题描述】:

我有一些问题。我需要计算从mousedown 事件到mouseup 的一些鼠标移动像素。所以我有这个代码:

selectArea.on({
    mousedown : function(e) {
        select = true;
    },
    mousemove : function(e) {
        var x2, y2, offset = $(this).offset();
            x2 = e.pageX - offset.left,
            y2 = e.pageY - offset.top,
            width = ?,
            height = ?
        ...
    },
    mouseup : function() {
        select = false;
    }
});

现在我需要知道我将鼠标从 mousedown 偏移量移动到 mouseup 偏移量的像素数,有什么方法可以计算吗?非常感谢您的帮助。

【问题讨论】:

  • 将鼠标位置保存在mousedown中并与mouseup中的实际位置进行比较不是更简单吗?所以你可以摆脱mousemove,只做mouseup mouse position - mousedown origin position。然后你得到了你的偏移量。
  • 您要计算经过的像素总数,还是只计算从起始位置到当前位置的距离?
  • 问题是我需要用这个坐标绘制一些div,并在mouseup后隐藏它。

标签: javascript jquery mouseevent offset mousemove


【解决方案1】:

有两种不同的解决方案,具体取决于您对“我移动了多少像素”的定义

场景:鼠标向右移动 25px,向左移动 75px。

方案一:50px; (起点和终点的距离)

在 mousedown 处理程序中,您保存鼠标的坐标。在 mouseup 处理程序中,您计算​​当前鼠标坐标与保存的坐标之间的差异。

方案二:100px; (行驶距离)

在 mousedown 处理程序中,您设置一个布尔值以指示您正在记录并保存鼠标的坐标,并将距离初始化为 0。在 mousemove 处理程序中,您计算​​当前鼠标坐标和保存的坐标之间的差异(添加它到距离),然后用当前鼠标坐标覆盖保存的坐标。在 mouseup 处理程序中,您输出距离并取消设置布尔值。

您的代码似乎适用于第二种解决方案,但问题要求第一种。

【讨论】:

  • 你能举个例子吗?
  • 这是一个我刚刚拼凑起来的例子:jsfiddle.net/RoryMcCrossan/8ahQB 虽然听起来你需要前者。
  • 谢谢@Rory,这几乎就是我的想法。我认为最好也将坐标保存在 mousedown 处理程序中,因为您错过了当前表单中 mousemove 的第一个刻度。另外,为了清楚起见,您可以在 mouseup 中取消设置它们,您可以设置为 null 或 undefined。最后的挑剔:如果您沿对角线移动鼠标,它会记录为在导管上移动。
  • @RoryMcCrossan 我已经使用了你的脚本,一切都很好,但我有一个问题,如何设置鼠标反转 - 当鼠标向后移动时,值仍在增长,是否有任何选项可以替换它?
  • @Lukas 你需要删除Math.abs() 函数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
相关资源
最近更新 更多