【发布时间】:2011-05-11 20:19:04
【问题描述】:
我需要在我的页面中放置一张图片。我想禁用该图像的拖动。我正在尝试很多事情,但没有帮助。有人可以帮帮我吗?
我不想将该图像保留为背景图像,因为我正在调整图像大小。
【问题讨论】:
-
@AgentConundrum - 如果用户保存并做他想做的任何事情,对我来说没有问题。我唯一的要求是不要拖动该图像。
标签: javascript jquery html css image
我需要在我的页面中放置一张图片。我想禁用该图像的拖动。我正在尝试很多事情,但没有帮助。有人可以帮帮我吗?
我不想将该图像保留为背景图像,因为我正在调整图像大小。
【问题讨论】:
标签: javascript jquery html css image
JQuery 的优雅方式
$("body").on('mousedown','img',function(e){
e.stopPropagation();
e.preventDefault();
});
【讨论】:
jQuery:
$('body').on('dragstart drop', function(e){
e.preventDefault();
return false;
});
您可以将 body 选择器替换为您希望防止其被拖放的任何其他容器。
【讨论】:
答案很简单:
<body oncontextmenu="return false"/> - 禁用右键单击
<body ondragstart="return false"/> - 禁用鼠标拖动
<body ondrop="return false"/> - 禁用鼠标拖放
【讨论】:
您可以为此使用内联代码
<img draggable="false" src="http://www.ourkanpur.com/images/logo.png">
第二个选项是使用外部或页面上的 css
img {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-user-drag: none;
user-drag: none;
-webkit-touch-callout: none;
}
<img src="http://www.ourkanpur.com/images/logo.png">
两者都正常工作 我在这个网站上使用外部 css (Click Here)
【讨论】:
我做了这里显示的 css 属性以及使用以下 javascript 监控 ondragstart:
handleDragStart: function (evt) {
if (evt.target.nodeName.match(/^(IMG|DIV|SPAN|A)$/i)) {
evt.preventDefault();
return false;
}
},
【讨论】:
为图像设置以下 CSS 属性:
user-drag: none;
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;
【讨论】:
最简单的跨浏览器解决方案是
<img draggable="false" ondragstart="return false;" src="..." />
问题
img {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-user-drag: none;
user-drag: none;
-webkit-touch-callout: none;
}
是不是在firefox中不工作
【讨论】:
盗用我自己的answer,只需在图像上添加一个相同大小的完全透明元素即可。调整图像大小时,请务必调整元素大小。
这应该适用于大多数浏览器,甚至是较旧的浏览器。
【讨论】:
img {
-moz-user-select: none;
-webkit-user-select: none;
-ms-user-select: none;
user-select: none;
-webkit-user-drag: none;
user-drag: none;
-webkit-touch-callout: none;
}
我在我的网站http://www.namdevmatrimony.in/ 上使用了它 它就像魔术一样工作!!! :)
【讨论】:
此代码完全符合您的要求。它可以防止图像被拖动,同时允许任何其他依赖于事件的操作。
$("img").mousedown(function(e){
e.preventDefault()
});
【讨论】:
您可能认为我的解决方案是最好的。大多数答案与 IE8 等旧浏览器不兼容,因为 e.preventDefault() 和 ondragstart 事件将不受支持。要做到跨浏览器兼容,您必须阻止此图像的 mousemove 事件。请参见下面的示例:
jQuery
$("#my_image").mousemove( function(e) { return false } ); // fix for IE
$("#my_image").attr("draggable", false); // disable dragging from attribute
没有 jQuery
var my_image = document.getElementById("my_image");
my_image.setAttribute("draggable", false);
if (my_image.addEventListener) {
my_image.addEventListener("mousemove", function(e) { return false });
} else if (my_image.attachEvent) {
my_image.attachEvent("onmousemove", function(e) { return false });
}
即使在 IE8 上也已经过测试和工作
【讨论】:
在你的图片标签中直接使用:ondragstart="return false;"。
<img src="http://image-example.png" ondragstart="return false;"/>
如果你有多张图片,用<div>标签包裹:
<div ondragstart="return false;">
<img src="image1.png"/>
<img scr="image2.png"/>
</div>
适用于所有主流浏览器。
【讨论】:
<img draggable="false" src="images/testimg1.jpg" alt=""/>
【讨论】:
我不知道这里的答案是否对每个人都有帮助,但这里有一个简单的内联 CSS 技巧,它肯定会帮助您禁用在 HTML 页面上拖动和选择文本。
在您的<body> 标签上添加ondragstart="return false"。这将禁用图像的拖动。但如果您还想禁用文本选择,请添加onselectstart="return false"。
代码将如下所示:<body ondragstart="return false" onselectstart="return false">
【讨论】:
document.getElementById('#yourImageId').addEventListener('dragstart', function(e) {
e.preventDefault();
});
在这个 Plunker 中工作http://plnkr.co/edit/HbAbJkF0PVLIMjTmEZml
【讨论】:
看到这个answer;在 Chrome 和 Safari 中,您可以使用以下样式来禁用默认拖动:
-webkit-user-drag: auto | element | none;
您可以在 Firefox 和 IE(10+) 上尝试 user-select:
-moz-user-select: none | text | all | element
-ms-user-select: none | text | all | element
【讨论】:
嗯,这是可能的,并且发布的其他答案是完全有效的,但您可以采取蛮力方法并防止 mousedown 在图像上的默认行为。其中,是开始拖动图像。
类似这样的:
window.onload = function () {
var images = document.getElementsByTagName('img');
for (var i = 0; img = images[i++];) {
img.ondragstart = function() { return false; };
}
};
【讨论】:
你可以喜欢这个...
document.getElementById('my-image').ondragstart = function() { return false; };
See it working (or not working, rather)
看来你正在使用 jQuery。
$('img').on('dragstart', function(event) { event.preventDefault(); });
【讨论】:
$(document) 而不是$(window)
$('img').on('dragstart', false);
只需将 draggable="false" 添加到您的图像标签:
<img draggable="false" src="image.png">
IE8 及以下不支持。
【讨论】:
纯 CSS 解决方案:使用 pointer-events: none
【讨论】:
img 上放置一个元素。
您可以将以下内容添加到您不想被拖动的每个图像中,(在img 标签内):
onmousedown="return false;"
例如
img src="Koala.jpg" onmousedown="return false;"
【讨论】:
由于我的图像是使用 ajax 创建的,因此在 windows.load 上不可用。
$("#page").delegate('img', 'dragstart', function (event) { event.preventDefault(); });
这样我可以控制哪个部分阻止行为,它只使用一个事件绑定,它适用于未来的 ajax 创建的图像,而无需做任何事情。
使用 jQuery 新的on 绑定:
$('#page').on('dragstart', 'img', function(event) { event.preventDefault(); });
(感谢@ialphan)
【讨论】:
img 元素,现在或将来。最不密集,最强大。
很好的解决方案,有一个冲突的小问题, 如果其他人与其他 js 库发生冲突,只需启用这样的冲突即可。
var $j = jQuery.noConflict();$j('img').bind('dragstart', function(event) { event.preventDefault(); });
希望这对某人有所帮助。
【讨论】:
我自己试了一下,发现这行得通。
$("img").mousedown(function(){
return false;
});
我确信这会禁用所有图像的拖动。不确定它会影响其他东西。
【讨论】:
<a> 标签内怎么办?那么如果用户点击图片,链接就不会被点击。
window.ondragstart = function() { return false; }
【讨论】: