如何在Firefox上的“拖动”事件处理程序中使用clientX和clientY?

时间:2009-05-20 11:04:14

标签: javascript events drag-and-drop firefox-3

Mozilla firefox 3.x在收听“ondrag”事件时似乎有一个错误。事件对象不报告被拖动对象的位置,clientX,clientY和其他屏幕偏移都设置为零。这是非常有问题的,因为我想根据被拖动的元素创建一个代理元素,当然使用clientX和clientY来调整它的位置。

我知道HTML5中的setDragImage等很酷的东西,但我想为浏览器之间的本机DD提供通用抽象。

错误的代码:

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

注意: 其他事件(dragstart,dragover)上不会发生此问题,拖动某些事件时无法捕获mousemove事件。

请帮忙!

3 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:3)

HTML 5中的拖动事件在当今的浏览器中并不完全正常。要模拟拖拽情况,您应该使用:

  1. 添加onmousedown事件,设置var true。
  2. 添加onmouseup事件,设置var false。
  3. 添加一个onmousemove事件,检查该var是否为true,如果是,则根据坐标移动div。
  4. 这一直对我有用。如果您遇到任何问题,请再次联系,我可以提供一些示例。

    祝你好运!

答案 2 :(得分:0)

  

我知道周围有很酷的东西   比如HTML5中的setDragImage但是我   想要提供通用的抽象   用于浏览器之间的本机DD。

但是为什么这样的事情不存在像JQuery& Prototype可用于跨浏览器拖放&降?

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

这将节省很多时间。