11

Mozilla Firefox 3.x 在监听“ondrag”事件时似乎有一个错误。事件对象不报告被拖动对象的位置,clientXclientY,和其他屏幕偏移都设置为零。

这是相当有问题的,因为我想根据被拖动和使用的元素制作代理元素,clientXclientY调整它的位置。

我知道有一些很酷的东西,比如setDragImage在 HTML5 中,但我想为浏览器之间的本地 DD 提供一个通用抽象。

错误代码:

document.addEventListener('drag', function(e) {
    console.log(e.clientX); // always Zero
}, false);

笔记:

此问题不会发生在其他事件(dragstart, dragover)上,并且mousemove在拖动某些东西时无法捕获事件。

4

3 回答 3

17

我找到了一个解决方案,我在文档级别的“dragover”事件上放置了一个侦听器,现在我获得了可以通过全局共享对象公开的正确 X 和 Y 属性。

于 2009-05-23T20:00:51.480 回答
3

HTML 5 中的拖动事件在当今的浏览器中并不能完全发挥作用。要模拟拖放情况,您应该使用:

  1. 添加一个 onmousedown 事件,设置一个 var true。
  2. 添加一个 onmouseup 事件,将该 var 设置为 false。
  3. 添加一个 onmousemove 事件,检查该变量是否为真,如果是,则根据坐标移动 div。

这一直对我有用。如果您遇到任何问题,请再次联系,我可以提供一些示例。

祝你好运!

于 2009-05-20T11:14:56.430 回答
0

我知道有一些很酷的东西,例如 HTML5 中的 setDragImage,但我想为浏览器之间的本地 DD 提供一个通用抽象。

但是为什么要做这样的事情,难道没有像JQuery & Prototype这样的库可用于跨浏览器拖放吗?

或者,如果您想实现自己的 DD 库,您可以借助他们的方法或扩展它们,因为这两个库都遵循面向对象的范例。

这将节省很多时间。

于 2009-05-20T11:35:02.193 回答