【问题标题】:Ignoring/canceling browser drag for JavaScript drag & drop忽略/取消 JavaScript 拖放的浏览器拖动
【发布时间】:2009-08-31 17:58:57
【问题描述】:

我正在(纯)JavaScript 中实现拖放脚本。一切都好,除了一件事。例如,在 Firefox 中(可能不仅仅是那里),如果您第二次拖动一个对象,它就会被拖动为一个内置的浏览器功能(例如,我认为可以轻松地将图像保存到桌面)。好吧,这会毁了我的剧本。

问题是,我知道这是可能的,而且我以前也做过,但那是很长时间了,我通过反复试验得到了它,只是在整个过程中输入了 focus() 和 blur()直到它似乎真正失去焦点为止。

因此,如果有人知道如何为我解决这个问题,他将成为我的个人英雄。拖动对象上的模糊()? focus() 在另一个上?等等

谢谢!

//好的,与此相关的代码部分将是:

...
    this.handle.onmousedown = function(e)
    {
        self.startDragging(e);
    };
    this.handle.onmouseup = function(e)
    {
        self.stopDragging(e);
    };
    setInterval(function(){self.animate()}, 25);
...
startDragging: function(e)
{
    this.dragging = true;
},
stopDragging: function(e)
{
    this.dragging = false;
},
animate: function()
{
    if(this.dragging)
...

【问题讨论】:

  • 太多了,会让人困惑。试想一下,您在页面中有一个 div,并且您希望它不能被浏览器拖动...

标签: javascript drag-and-drop


【解决方案1】:

除非我误解了您的问题,请尝试 event.preventDefault();在您的 mousedown 事件侦听器中。如果您能提供代码的 sn-ps 来向我们展示您是如何实现拖放的,那将会有所帮助。

编辑:通过您的实施,这样的事情应该可以工作:

this.handle.onmousedown = function(e) {
    if(!e) e = window.event;
    if(e.preventDefault) e.preventDefault();
    else e.returnValue = false;

    self.startDragging(e);
};

但是,我建议改用事件侦听器。

【讨论】:

  • 嗯,事实上它有效!惊人的。但这仅适用于 Firefox 吗?
  • 嗯,IE 实现事件侦听器的方式略有不同,因此您必须考虑到这一点。我认为在 IE 中你只是在 mousedown 事件中返回 false 。我建议在 quirksmode.org 上阅读有关跨浏览器事件侦听器的信息。
猜你喜欢
  • 2012-10-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-12
  • 2019-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-05
相关资源
最近更新 更多