禁用拖放 HTML 元素?

IT技术 javascript css
2021-02-01 12:34:05

我正在开发一个 Web 应用程序,我正在尝试为其实现一个功能齐全的窗口系统。现在一切顺利,我只遇到一个小问题。有时,当我去拖动应用程序的一部分(通常是我窗口的角落 div,它应该触发调整大小操作)时,Web 浏览器会变得聪明并认为我的意思是拖放某些东西。最终结果是,当浏览器执行拖放操作时,我的操作被暂停。

有没有简单的方法来禁用浏览器的拖放?理想情况下,我希望能够在用户单击某些元素时将其关闭,但重新启用它,以便用户仍然可以在我的窗口内容上使用浏览器的正常功能。我正在使用 jQuery,虽然我无法在浏览文档时找到它,但如果您知道纯 jQuery 解决方案,那就太好了。

简而言之:我需要在用户按下鼠标按钮时禁用浏览器文本选择和拖放功能,并在用户释放鼠标时恢复该功能。

6个回答

这有效。试试看。

<BODY ondragstart="return false;" ondrop="return false;">
这将禁用拖动,但不幸的是,它仍然不允许您从链接文本的中间开始拖动选择文本区域。
2021-03-30 12:34:05

尝试在 mousedown 事件上防止默认:

<div onmousedown="event.preventDefault ? event.preventDefault() : event.returnValue = false">asd</div>

或者

<div onmousedown="return false">asd</div>
+1 - 但是,这在 Firefox(6.0 及更低版本)中具有不幸的副作用,它阻止将:active伪类应用于元素。这意味着我不能真正将它用于我的链接。
2021-04-05 12:34:05

这可能有效:您可以禁用使用 css3 选择文本、图像和基本上所有内容。

.unselectable {
   -moz-user-select: -moz-none;
   -khtml-user-select: none;
   -webkit-user-select: none;

   /*
     Introduced in IE 10.
     See http://ie.microsoft.com/testdrive/HTML5/msUserSelect/
   */
   -ms-user-select: none;
   user-select: none;
}

当然仅适用于较新的浏览器。有关更多详细信息,请检查:

如何使用 CSS 禁用文本选择突出显示?

太感谢了。我想要一个可点击的div,但禁用拖动。
2021-03-25 12:34:05
@Ionică Bizău 如果您想让内容可点击,最好使用按钮或标签,因为某些没有鼠标和触摸屏的设备会识别这些内容并使其可供用户选择。
2021-04-11 12:34:05

使用 jQuery,它将是这样的:

$(document).ready(function() {
  $('#yourDiv').on('mousedown', function(e) {
      e.preventDefault();
  });
});

在我的情况下,我想禁止用户在输入中放置文本,所以我使用了“drop”而不是“mousedown”。

$(document).ready(function() {
  $('input').on('drop', function(event) {
    event.preventDefault();
  });
});

相反, event.preventDefault() 您可以返回 false。这就是不同之处。

和代码:

$(document).ready(function() {
  $('input').on('drop', function() {
    return false;
  });
});