【问题标题】:How to get the mouse position from 'drag' events in Firefox如何从 Firefox 中的“拖动”事件中获取鼠标位置
【发布时间】:2014-07-24 19:31:53
【问题描述】:

对于“可拖动”domNoes,“拖动”事件似乎根本不包含任何鼠标信息(如 offsetX 和 offsetY),就像它在 chrome 中所做的那样。拖动时如何获取此信息?

我尝试在文档上设置“mousemove”事件处理程序,但似乎在拖动某些内容时不会触发该事件处理程序。在 chrome 中似乎也是如此。好累啊。。

我使用的是 Firefox 30。

【问题讨论】:

    标签: javascript html drag-and-drop


    【解决方案1】:

    drag 事件用于被拖动的元素。 dragover 可用于保持静止的其他元素,以便将某些东西拖过它们。如果您在drag 事件中要求clientXclientY,您将得到零。如果您将该元素拖到带有dragover 的元素上,并向that 事件询问坐标,您将获得相对于dragover 监听元素的x 和y。

    查看它的最简单示例是将dragover 应用于文档对象,然后在其上拖动一些东西并打印 x 和 y。

    【讨论】:

      【解决方案2】:

      更新

      很抱歉回复延迟,我一直很忙。如果您将 mousemove 事件附加到实际文档而不是元素,那么它仍应触发。例如:

      document.addEventListener("mousemove", moveHandler, true);
      

      请注意,我将最后的布尔值设置为“true”;这意味着事件在捕获阶段触发。它应该根据需要更新鼠标移动功能中的坐标。至于获取被拖动的元素,您可以从拖动处理程序中的 event.target 获取该元素引用,如下所示:

      function dragHandler(e) {
          var el = e.target; //this is the element being dragged
      }
      

      您可以使用它来确定您正在拖动的元素的偏移量:

      var rectObject = element.getBoundingClientRect();
      var top_offset = rectObject.top;
      var left_offset = rectObject.left;
      

      如果您需要鼠标坐标,则需要将 mousemove 事件侦听器附加到 DOM 并将坐标存储在全局变量中,以便您可以在拖动侦听器中访问它们。

      【讨论】:

      • 你如何让元素被拖动?据我了解“可拖动”,除非您在拖动事件处理程序中影响它,否则相关元素本身根本不会移动。另外,正如我在问题中提到的,鼠标移动在拖动某些东西时不会被触发。
      猜你喜欢
      • 2017-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-11
      • 1970-01-01
      相关资源
      最近更新 更多