Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery使用鼠标移动元素_Javascript_Jquery - Fatal编程技术网

Javascript jQuery使用鼠标移动元素

Javascript jQuery使用鼠标移动元素,javascript,jquery,Javascript,Jquery,所以我可以用鼠标移动一个元素,但是问题是偏移量是从元素的左上角开始计算的,没有考虑鼠标在元素中的位置,导致对象向鼠标跳跃,并阻止您向上或向左拖动它 所以我提出了这个函数: handle.on("mousemove", function(e) { if (state.dragging) { var paneOffset = pane.offset(); var mouseOffset = { 'top': e.pageY - paneOffset

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

所以我提出了这个函数:

  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
      });
    }
  });
例如:

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


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

您可以计算dragstart上的初始鼠标偏移量,并因此将其用作mousemove处理程序中的全局变量。因为dragstart在鼠标移动之前启动,所以我看不出有问题


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

您可以计算dragstart上的初始鼠标偏移量,从而将其用作鼠标移动处理器。因为dragstart在鼠标移动之前启动,所以我看不出有问题


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

存储开始拖动时鼠标位置与元素左上角之间的距离。然后,只需从鼠标位置减去这些值,即可计算鼠标移动时的元素位置。

开始拖动时,存储鼠标位置与元素左上角之间的距离。然后,只需从鼠标位置减去这些值,即可计算鼠标移动时的元素位置。

为什么不使用它?我不知道答案是什么?你为什么不使用jquerydraggable?不用重新发明轮子总是好的。或者,您可以参考该代码来帮助解决您的问题。除此之外,代码的工作演示也会很有用@Dutchie432@Chankjh我不想使用它,因为它是一个大规模的应用程序,并且添加了很多不必要的膨胀,另外我想为这个函数添加一些额外的逻辑,例如拖动边界。等等。添加了fiddle来回答。为什么不想使用它?我不知道答案是什么?你为什么不使用jquerydraggable?不用重新发明轮子总是好的。或者,您可以参考该代码来帮助解决您的问题。除此之外,代码的工作演示也会很有用@Dutchie432@Chankjh我不想使用它,因为它是一个大规模的应用程序,并添加了许多不必要的膨胀,加上我想添加一些额外的逻辑这个功能,如拖动边界。等添加小提琴来回答。谢谢。。。要添加到这一点,您需要存储对象的初始偏移量和鼠标的初始偏移量,并计算鼠标相对于
mouseMove
上的原始偏移量的相对偏移量,然后对元素应用相同的变换。是的,一直都是这样。很酷,将其添加到答案中。谢谢。。。要添加到这一点,您需要同时存储对象初始偏移量和鼠标初始偏移量,并计算鼠标相对于
mouseMove
上原始对象的相对偏移量,然后对元素应用相同的变换。是的,这是一直以来的方式。酷,在答案中添加了这一点。