1

所以我可以用鼠标移动一个元素,但是问题是偏移量是从元素的左上角计算的,没有考虑到鼠标在元素中的位置,导致对象跳向鼠标并防止你从向上或向左拖动它。

所以我想出了这个功能:

  handle.on("mousemove", function(e) {
    if (state.dragging) {
      var paneOffset = pane.offset();
      var mouseOffset = {
        'top': e.pageY - paneOffset.top,
        'left': e.pageX - paneOffset.left
      }
      pane.offset({
        top: e.pageY - mouseOffset.top,
        left: e.pageX - mouseOffset.left
      });
    }
  });

示例:http: //jsfiddle.net/SEKxc/

这样做的问题是它会阻止元素移动,因为它总是计算元素的相同精确偏移量。我如何使元素跟随鼠标但相对于鼠标在对象中的位置。

我知道 jQueryUI 内置了这个功能,但不想使用它。

4

2 回答 2

1

您可以在 dragstart 上计算初始 mouseoffset 并因此将其用作 mousemove 处理程序中的全局变量。由于拖动开始在鼠标移动之前开始,我没有看到问题。

更新:您需要存储对象初始偏移量和鼠标初始偏移量,并计算鼠标与 mouseMove 上原始偏移量相比的相对偏移量,然后对元素应用相同的变换。

于 2013-01-01T21:17:11.007 回答
0

开始拖动时存储鼠标位置和元素左上角之间的距离。然后,您只需从鼠标位置中减去它们即可计算鼠标移动时的元素位置。

于 2013-01-01T21:17:51.943 回答