HTML5: dragover(), drop(): 如何获取当前 x,y 坐标?

Posted

技术标签:

【中文标题】HTML5: dragover(), drop(): 如何获取当前 x,y 坐标?【英文标题】:HTML5: dragover(), drop(): how get current x,y coordinates? 【发布时间】:2011-01-27 03:44:00 【问题描述】:

如何在 html5 DnD 中拖动“dragover”和放置(“drop”)之后确定 (x,y) 坐标?

我找到了一个网页,其中描述了用于 Dragover 的 x,y(查看 e.offsetX 和 e.layerX 以查看是否为各种浏览器设置,但对于我来说,它们并未设置)。

drop(e) 函数用什么来找出当前放置目标中实际放置的位置?

我正在编写一个在线电路设计应用程序,我的放置目标很大。

我需要下拉到鼠标级别来找出 x,y 还是 HTML5 提供了更高级别的抽象?

【问题讨论】:

【参考方案1】:

应该设置属性clientXclientY(在现代浏览器中):

function drag_over(event) 
    console.log(event.clientX);
    console.log(event.clientY);
    event.preventDefault();
    return false;

function drop(event) 
    console.log(event.clientX);
    console.log(event.clientY);
    event.preventDefault();
    return false;

Here's a (somewhat) practical example 适用于 Firefox 和 Chrome。

【讨论】:

感谢演示。你知道为什么在 Safari 和 Chrome 上,当文本被丢弃时,它不会完全保持在同一个位置吗?拖动的元素移动了几个像素。 @Charles 我在 Chrome 中尝试过(在 Windows 上)但我没有看到它,如果你知道它是什么请告诉我 好主意,但是 clientX 和 clientY 将不准确,与光标与被删除元素左上角的距离成正比。【参考方案2】:

以 robertc 的回答为基础并解决该问题:

clientX 和 clientY 将不准确,与光标与被删除元素左上角的距离成正比。

您可以通过从dragEnd 记录的客户端坐标中减去dragStart 记录的客户端坐标来简单地计算增量距离。请记住,被删除的元素在dragEnd 处仍然具有完全相同的位置,您可以通过增量距离对其进行更新以获得新的左侧和顶部位置坐标。

这是一个 demo 在 react 中,虽然同样可以在普通 JS 中完成。

【讨论】:

以上是关于HTML5: dragover(), drop(): 如何获取当前 x,y 坐标?的主要内容,如果未能解决你的问题,请参考以下文章

无法触发 drop 事件(是的,我在 dragover 中阻止了 Default()ed)

原生 drag drop HTML5

HTML5拖拽/拖放(drag & drop)详解

拖放期间未触发Javascript Drop事件

除非处理了拖动,否则 HTML5 放置事件不起作用

dragover 上的浏览​​器响应 - html5 拖放