CSS / JS 来防止拖拽鬼影?

IT技术 javascript html css
2021-03-02 11:47:12

有没有办法防止用户看到他们试图拖动的图像的幻影(不是担心图像的安全性,而是体验)。

我试过这个,它解决了文本和图像上的蓝色选择问题,但不是鬼图像:

img {
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -o-user-select: none;
  user-select: none;
}

(我也尝试将图像嵌套在 div 中,并将相同的规则应用于 div)。谢谢

6个回答

您可以在标记或 JavaScript 代码中将该draggable属性设置为false

// As a jQuery method: $('#myImage').attr('draggable', false);
document.getElementById('myImage').setAttribute('draggable', false);
<img id="myImage" src="http://placehold.it/150x150">

@James:老实说,这个问题不是很清楚。我主要是在假设鬼图像是拖放的视觉指示器(它是)的情况下回答的,并且大多数想要隐藏鬼图像的人通常不关心拖放是否是完全禁用。
2021-04-22 11:47:12
在 FF 中与-moz-user-select: none. 可能的解决方案:添加pointer-events: none.
2021-05-09 11:47:12
@Greg:你为什么问我?这是想要 JavaScript 解决方案的 OP。另外,我确实说过“在标记或 JavaScript 代码中”,所以如果您可以选择编辑标记,那么并不是说您不能在标记中做到这一点。
2021-05-14 11:47:12
也许我误解了这个问题,但 OP 不是在问他们如何保留拖放功能而只是隐藏重影图像吗?设置draggablefalse将完全禁用拖放。
2021-05-14 11:47:12
为什么用 JavaScript 添加它??? <img id="myImage" src="http://placehold.it/150x150" draggable="false">
2021-05-18 11:47:12

我想你可以改变你的

img {
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -o-user-select: none;
  user-select: none;
}

img {
  -webkit-user-drag: none;
  -khtml-user-drag: none;
  -moz-user-drag: none;
  -o-user-drag: none;
  user-drag: none;
}
此解决方案不适用于 IE11 和 Firefox 57.0。
2021-04-24 11:47:12
@victorsosa 是的,但事实上的标准仍然是标准,W3C 与否。也就是说,如果每个浏览器都支持它,那就很好了。请记住,很多 W3C 的东西一开始都是专有的,比如 AJAX。
2021-05-06 11:47:12

试试看:

img {
  pointer-events: none;
}

并尽量避免

* {
  pointer-events: none;
}
@Chad 是的,但可以包装图像并将事件侦听器添加到包装器,而图像不再有幻影。
2021-04-26 11:47:12
这是一个糟糕的解决方案,因为它消除了与元素交互的所有能力。OP 只是要求禁用元素的“拖动”功能,而不是完全禁用与元素的任何和所有基于指针的交互。
2021-04-29 11:47:12

这将禁止在所有浏览器中拖动图像,同时保留其他事件,例如单击和悬停。只要 HTML5、JS 或 CSS 中的任何一个可用,就可以工作。

<img draggable="false" onmousedown="return false" style="user-drag: none" />

如果您确信用户将拥有 JS,则只需要使用 JS 属性等。为了获得更大的灵活性,请查看 ondragstart、onselectstart 和一些 WebKit tap/touch CSS。

我在 Firefox 62 上,这就onmousedown="return false"足够了。还需要避免用户在拖动时选择图像,这将允许他们拖动选择。
2021-04-24 11:47:12
@Kaizoku 谢谢,我没有考虑过!根据您的建议更新了我的答案。
2021-04-30 11:47:12
这在 FireFox 中似乎不起作用,因为严格来说, <img> 甚至没有 onclick 或 click 事件。无论如何,我只是使用了 onmouseup 部分并让父 DIV 处理 onclick 并且它可以工作。
2021-05-04 11:47:12
@Nelson 谢谢你让我知道。似乎无论如何都不需要 onmouseup,因为无论来自任何 onmousedown/up 处理程序的返回值如何,onclick 都会触发。为了简单起见,我决定修改我的答案。新的 one-liner 应该可以正常工作;刚刚在 FF、Safari、Chrome、IE8/10 中进行了测试。
2021-05-04 11:47:12
你可能想要做 (this.onclick || this.click)() 代替..如果根据这个逻辑可以取消定义 onclick ?
2021-05-06 11:47:12

您可以使用 CSS 属性在 webkit 浏览器中禁用图像。

img{-webkit-user-drag: none;}
这也适用于-ms-user-drag-moz-user-draguser-drag一个很棒的纯 CSS 解决方案!
2021-05-15 11:47:12