CSS/JS防止拖动鬼影?

use*_*355 127 html javascript css html5 css3

有没有办法阻止用户看到他们试图拖动的图像的鬼魂(不关心图像的安全性,而是体验).

我试过这个解决了文本和图像上的蓝色选择而不是重影图像的问题:

img {
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -o-user-select: none;
  user-select: none;
}
Run Code Online (Sandbox Code Playgroud)

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

Bol*_*ock 168

您可以在标记或JavaScript代码中将draggable属性设置为false.看这个演示.

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

  • 为什么用JavaScript添加它??? `<img rel="nofollow noreferrer" id ="myImage"src ="http://placehold.it/150x150"draggable ="false">` (29认同)
  • @Greg:你为什么问我?OP是想要JavaScript解决方案的人.另外,无论如何,我确实说过"在标记或JavaScript代码中",所以如果您可以选择编辑标记,那么它就不会像你一样*在标记中执行它. (17认同)
  • 在FF中与`-moz-user-select:none`结合使用时不起作用.可能的解决方案:添加`pointer-events:none`. (11认同)
  • 也许我误解了这个问题,但不是OP询问他们如何保留拖放而只是隐藏幻影图像?将`draggable`设置为`false`将完全禁用拖放. (7认同)
  • @James:说实话,这个问题还不是很清楚。我主要是在假设重影图像是拖放的视觉指示器(确实如此)的情况下回答的,并且大多数想要隐藏重影图像的人通常不关心拖放是否是完全禁用。 (2认同)

小智 59

我想你可以改变你的想法

img {
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -o-user-select: none;
  user-select: none;
}
Run Code Online (Sandbox Code Playgroud)

进入

img {
  -webkit-user-drag: none;
  -khtml-user-drag: none;
  -moz-user-drag: none;
  -o-user-drag: none;
  user-drag: none;
}
Run Code Online (Sandbox Code Playgroud)

  • @victorsosa 是的,但事实上的标准仍然是标准,W3C 与否。也就是说,如果每个浏览器都支持它,那就很好了。请记住,很多 W3C 的东西一开始都是专有的,比如 AJAX。 (4认同)
  • 此解决方案在IE11和Firefox 57.0中不起作用. (3认同)
  • 根据此页面,该页面未显示http://realworldvalidator.com/css/properties/-webkit-user-drag,也不是W3C的标准 (2认同)
  • 对于下一个想找出差异的昏昏欲睡的人:“-select”变成“-drag” (2认同)

Eri*_*kin 20

试试吧:

img{pointer-events: none;}
Run Code Online (Sandbox Code Playgroud)

并尽量避免

*{pointer-events: none;}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个糟糕的解决方案,因为它消除了与元素交互的所有功能。OP仅要求禁用元素的“拖动”功能,而不是完全禁用与元素的任何基于指针的交互。 (7认同)
  • @Chad这是真的,但它可以包装图像并将事件监听器添加到包装器,而图像不再有重影图像. (2认同)

小智 13

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

img{-webkit-user-drag: none;}
Run Code Online (Sandbox Code Playgroud)

  • 这也适用于 `-ms-user-drag`、`-moz-user-drag` 和 `user-drag`。一个很棒的纯 CSS 解决方案! (4认同)

Bee*_*jor 10

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

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

如果你确信用户将拥有JS,你只需要使用JS属性等.为了更加灵活,请查看ondragstart,onselectstart和一些WebKit点击/触摸CSS.


SLa*_*aks 9

处理dragstart事件和return false.


MD *_*YON 8

很简单,不要用很多逻辑让它变得复杂使用简单的属性draggable并使它成为false

<img draggable="false" src="img/magician.jpg" alt="" />
Run Code Online (Sandbox Code Playgroud)


lub*_*sdz 7

<img src="myimage.jpg" ondragstart="return false;" />
Run Code Online (Sandbox Code Playgroud)


Jus*_*tin 6

be-all-end-all,无需选择或拖动,带有所有浏览器前缀:

-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
-ms-user-select: none;
user-select: none;

-webkit-user-drag: none;
-khtml-user-drag: none;
-moz-user-drag: none;
-o-user-drag: none;
-ms-user-drag: none;
user-drag: none;
Run Code Online (Sandbox Code Playgroud)

您还可以将draggable属性设置为false。您可以使用内联 HTML: draggable="false"、Javascript:elm.draggable = false或 jQuery:来执行此操作elm.attr('draggable', false)

您还可以将onmousedown函数处理为return false. 您可以使用内联 HTML: onmousedown="return false"、Javascript:elm.onmousedown=()=>return false;或 jQuery 执行此操作:elm.mousedown(()=>return false)


Emi*_*miz 5

以下是防止拖拽重影的三种不同方法:

超文本标记语言

<img draggable="false" src="img/example.jpg">
Run Code Online (Sandbox Code Playgroud)

JavaScript

document.querySelector('img').addEventListener('dragstart', (event) => {
  event.preventDefault();
});
Run Code Online (Sandbox Code Playgroud)

CSS

img {
  -webkit-user-drag: none;
}
Run Code Online (Sandbox Code Playgroud)

参考

目前,浏览器或标准轨道上没有user-drag实现无前缀或其他版本的属性,因为 HTML 可拖动属性/属性是首选解决方案。

它是 Webkit 特定的属性。WebKit 文档对此的描述如下:

使元素可拖动

WebKit 提供自动支持,让用户拖动常见项目,例如图像、链接和选定的文本。您可以扩展此支持以包含 HTML 页面上的特定元素。例如,您可以将特定的 div 或 span 标记标记为可拖动。

要将任意元素标记为可拖动,请将该-webkit-user-drag属性添加到该元素的样式定义中。由于-webkit-user-drag是级联样式表 (CSS) 属性,因此您可以将其作为样式定义的一部分,或作为元素标记上的内联样式属性。表 4-1 中列出了该属性的值。

-webkit-user-drag 属性的值:

  • none:不允许拖动该元素。

  • element:允许拖动该元素。

  • auto:使用默认逻辑来确定元素是否应该被拖动。(图像、链接和文本选择是唯一可以拖动的元素。)这是默认值。

所有使用 WebKit 渲染引擎的浏览器都支持它,例如 Chrome、较新版本的 Opera、Safari 等。使用 WebKit 的移动浏览器的支持可能会因移动操作系统而异。


Mic*_*per 3

将图像放置为空 div 的背景,或放置在透明元素下。当用户单击要拖动的图像时,他们正在单击一个 div。

请参阅http://www.flickr.com/photos/thefella/5878724253/?f=hp

<div id="photo-drag-proxy"></div>
Run Code Online (Sandbox Code Playgroud)