禁用从HTML页面拖动图像

时间:2010-11-18 05:17:22

标签: javascript jquery html css image

我需要在我的页面中放置一张图片。我想禁用拖动该图像。我正在尝试很多东西,但没有任何帮助。有人可以帮助我吗?

我不想将该图像保留为背景图像,因为我正在调整图像大小。

25 个答案:

答案 0 :(得分:254)

你可以这样......

document.getElementById('my-image').ondragstart = function() { return false; };

See it working (or not working, rather)

看来你正在使用jQuery。

$('img').on('dragstart', function(event) { event.preventDefault(); });

答案 1 :(得分:145)

仅CSS解决方案:使用pointer-events: none

https://developer.mozilla.org/en-US/docs/CSS/pointer-events

答案 2 :(得分:114)

只需在图片代码中添加draggable =“false”:

<img draggable="false" src="image.png">

IE8及以下不支持。

答案 3 :(得分:41)

window.ondragstart = function() { return false; } 

答案 4 :(得分:24)

我试过自己,发现这是有效的。

$("img").mousedown(function(){
    return false;
});

我确信这会禁用拖动所有图像。不确定它会影响别的东西。

答案 5 :(得分:24)

最简单的跨浏览器解决方案

<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中不起作用

答案 6 :(得分:24)

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/的网站上使用过它 它像魔术一样工作! :)

答案 7 :(得分:13)

answer;在Chrome和Safari中,您可以使用以下样式禁用默认拖动:

-webkit-user-drag: auto | element | none;

您可以尝试user-select用于Firefox和IE(10 +):

-moz-user-select: none | text | all | element
-ms-user-select: none | text | all | element

答案 8 :(得分:11)

您可以将以下内容添加到您不希望可拖动的每个图像中(在img标记内):

onmousedown="return false;"

e.g。

img src="Koala.jpg" onmousedown="return false;"

答案 9 :(得分:10)

此代码完全符合您的要求。它可以防止图像拖动,同时允许任何其他依赖于事件的操作。

$("img").mousedown(function(e){
    e.preventDefault()
});

答案 10 :(得分:9)

在图片代码中直接使用此代码: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>

适用于所有主流浏览器。

答案 11 :(得分:8)

由于我的图像是使用ajax创建的,因此无法在windows.load上使用。

$("#page").delegate('img', 'dragstart', function (event) { event.preventDefault(); });

通过这种方式,我可以控制哪个部分阻止了行为,它只使用一个事件绑定,它可以用于未来的ajax创建的图像而无需做任何事情。

使用jQuery新on绑定:

$('#page').on('dragstart', 'img', function(event) { event.preventDefault(); }); (感谢@ialphan)

答案 12 :(得分:4)

将以下CSS属性设置为图像:

user-drag: none; 
user-select: none;
-moz-user-select: none;
-webkit-user-drag: none;
-webkit-user-select: none;
-ms-user-select: none;

答案 13 :(得分:4)

很好的解决方案,有一个小问题冲突, 如果其他任何人与其他js库发生冲突,则不要像这样冲突。

var $j = jQuery.noConflict();$j('img').bind('dragstart', function(event) { event.preventDefault(); });

希望这可以帮助别人。

答案 14 :(得分:3)

嗯,我不知道这里的答案是否对每个人都有帮助,但这里有一个简单的内联CSS技巧,肯定会帮助你在HTML页面上禁用拖动和选择文本。

<body>标记上添加ondragstart="return false"。这将禁用拖动图像。但是,如果您还想禁用文本选择,请添加onselectstart="return false"

代码如下所示:<body ondragstart="return false" onselectstart="return false">

答案 15 :(得分:3)

<img draggable="false" src="images/testimg1.jpg" alt=""/>

答案 16 :(得分:2)

您可能认为我的解决方案最好。大多数答案与IE8等旧浏览器不兼容,因为不支持 e.preventDefault()以及 ondragstart 事件。为了实现跨浏览器兼容,您必须阻止此图像的 mousemove 事件。见下面的例子:

<强>的jQuery

using System;
using System.Windows.Forms;
using System.Runtime.InteropServices;


namespace Test
{
    static class Program
    {
        [DllImport("kernel32.dll")]
        static extern bool AttachConsole(int dwProcessId);
        private const int ATTACH_PARENT_PROCESS = -1;

        [STAThread]
        static void Main()
        {
            AttachConsole(ATTACH_PARENT_PROCESS);
            Console.WriteLine("This will show on console.");

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Application.Run(new Form1());
        }
    }
}

没有jQuery

$("#my_image").mousemove( function(e) { return false } ); // fix for IE
$("#my_image").attr("draggable", false); // disable dragging from attribute

甚至为IE8测试和工作

答案 17 :(得分:2)

document.getElementById('#yourImageId').addEventListener('dragstart', function(e) {
     e.preventDefault();
});

适用于此Plunker http://plnkr.co/edit/HbAbJkF0PVLIMjTmEZml

答案 18 :(得分:2)

嗯,这是可能的,并且发布的其他答案完全有效,但您可以采取暴力方法并防止mousedown在图像上的默认行为。其中,就是开始拖动图像。

这样的事情:

window.onload = function () {  
    var images = document.getElementsByTagName('img');   
    for (var i = 0; img = images[i++];) {    
        img.ondragstart = function() { return false; };
    }  
};  

答案 19 :(得分:1)

jQuery:

$('body').on('dragstart drop', function(e){
    e.preventDefault();
    return false;
});

您可以将 body 选择器替换为您要防止子级拖放的任何其他容器。

答案 20 :(得分:0)

答案很简单:

<body oncontextmenu="return false"/>-禁用右键单击    <body ondragstart="return false"/>-禁用鼠标拖动    <body ondrop="return false"/>-禁用鼠标拖放

答案 21 :(得分:0)

使用 JQuery 的优雅方式

$("body").on('mousedown','img',function(e){
    e.stopPropagation();
    e.preventDefault();
});

答案 22 :(得分:-1)

从我自己的answer窃取,只需在图像上添加一个相同大小的完全透明元素。调整图像大小时,请务必调整元素大小。

这适用于大多数浏览器,甚至是较旧的浏览器。

答案 23 :(得分:-1)

我做了这里显示的css属性以及使用以下javascript监视ondragstart:

handleDragStart: function (evt) {
    if (evt.target.nodeName.match(/^(IMG|DIV|SPAN|A)$/i)) {
      evt.preventDefault();
      return false;
    }
  },

答案 24 :(得分:-1)

您可以为此使用内联代码

<img draggable="false" src="http://www.ourkanpur.com/images/logo.png">

第二个选项是使用外部CSS或页面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">

两者均正常工作 我正在此网站(Click Here)

上使用外部CSS