Wyłącz przeciąganie obrazu ze strony HTML


195

Muszę umieścić obraz na mojej stronie. Chcę wyłączyć przeciąganie tego obrazu. Próbuję wielu rzeczy, ale bez pomocy. Czy ktoś może mi pomóc?

Nie chcę zachować tego obrazu jako obrazu tła, ponieważ zmieniam jego rozmiar.


15
@AgentConundrum - Nie ma dla mnie problemu, jeśli użytkownik zapisuje i robi, co chce. Moim jedynym wymaganiem jest, aby nie przeciągać tego obrazu.
Użytkownik 1034,

Odpowiedzi:


262

Możesz to polubić ...

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

Zobacz, jak działa (a raczej nie działa)

Wygląda na to, że używasz jQuery.

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

9
@alex - Celem braku przeciągania obrazu nie jest kradzież obrazu. Cel jest zupełnie inny. Sprawiam, że ten obraz jest sortowalny i możliwy do usunięcia. Wyjaśnienie tego zajmuje dużo czasu.
Użytkownik 1034,

2
@alex - Czy ondragstart jest niezależny od przeglądarki?
Użytkownik 1034,

1
@AdamMerrifield Spróbuj $(document)zamiast$(window)
rybo111

2
Właśnie $('img').on('dragstart', false);
wymyśliłem


174

Rozwiązanie tylko CSS: użyj pointer-events: none

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


3
Ale to prowadziło do dziwnego efektu selekcji przynajmniej w FF. Lepiej nadal zwracaj fałsz;
Bhumi Singhal

nie jest używany, gdy obraz jest łączem.
Nilesh patel

3
Wygląda na to, że to nie zadziała w IE (dowolnej wersji) patrz: caniuse.com/pointer-events
Justin Tanner

8
Również CSS tylko rozwiązanie: umieścić element nadimg .
alex

6
-1! Należy tego użyć, aby zapobiec WSZYSTKIM zdarzeniom ponter (w tym przeciąganie, na przykład, gdy chcesz załadować obraz). Użyj rozwiązania javascript isntead!
Denys Vitali,

130

po prostu dodaj draggable = "false" do tagu obrazu:

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

IE8 i poniżej nie obsługuje jednak.


Używam Magento, więc moja div jak: <div class = "product-img-box"> <? Php echo $ this-> getChildHtml ('media')?> </div> Jak mogę ograniczyć kliknięcie prawym przyciskiem i nie można przeciągać mój wizerunek div. @dmo
Gem

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

4
+1 Nie rozumiem głosów negatywnych. To nie jest najlepsze rozwiązanie, ponieważ zapobiega przeciągnięciu wszystkiego, nie tylko specjalnego obrazu. Ale pokazuje właściwy kierunek (i myślę, że to pierwsza odpowiedź, która to robi)
Dr.Molle,

@DrMolle Być może była to odpowiedź na (od momentu usunięcia) komentarze pozostawione przez Steve'a na mojej odpowiedzi .
alex

2
Pamiętaj, że czasami ludzie przeciągają link do paska zakładek - to rozwiązanie usuwa tę możliwość.
jClark,

33

najprostszym rozwiązaniem dla wielu przeglądarek jest

<img draggable="false" ondragstart="return false;" src="..." />

problem z

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;
}

jest to, że nie działa w Firefox



24

Spróbowałem i okazało się, że to działa.

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

Jestem pewien, że wyłącza to przeciąganie wszystkich obrazów. Nie jestem pewien, czy wpływa to na coś innego.


3
Ach! Powinieneś wspomnieć, że używasz jQuery / mógłbyś użyć jQuery. +1 za korzystanie z jQuery.
Alex

@alex - przepraszam. Próbowałem tego sam. I nie jestem pewien, czy to wpływa na coś innego.
Użytkownik 1034,

jesteś w porządku! Nie, o ile mi wiadomo, robienie tego, co tu masz, nie powinno mieć negatywnego wpływu na nic innego.
Alex

2
Co się stanie, jeśli obraz zostanie zawinięty w <a>znacznik? Jeśli użytkownik kliknie obraz, link nie zostanie kliknięty.
SeinopSys

Dzięki. Przy okazji działa to również w GWT z `event.preventDefault ();`.
Johanna

14

Zobacz tę odpowiedź ; w Chrome i Safari możesz użyć następującego stylu, aby wyłączyć domyślne przeciąganie:

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

Możesz spróbować wybrać użytkownika dla przeglądarki Firefox i IE (10+):

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

11

Możesz dodać następujące elementy do każdego obrazu, którego nie chcesz przeciągać (wewnątrz imgtagu):

onmousedown="return false;"

na przykład

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

10

Ten kod robi dokładnie to, co chcesz. Zapobiega przeciąganiu obrazu, jednocześnie umożliwiając wszelkie inne działania zależne od zdarzenia.

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

9

Bezpośrednio użyj tego: ondragstart="return false;"w swoim tagu obrazu.

<img src="http://image-example.png" ondragstart="return false;"/>

Jeśli masz wiele zdjęć zawiniętych w <div>tag:

<div ondragstart="return false;">
   <img src="image1.png"/>
   <img scr="image2.png"/>
</div>

Działa we wszystkich głównych przeglądarkach.


8

Ponieważ moje obrazy zostały utworzone przy użyciu ajax, a zatem nie są dostępne w windows.load.

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

W ten sposób mogę kontrolować, która sekcja blokuje zachowanie, używa tylko jednego powiązania zdarzenia i działa dla przyszłych obrazów utworzonych przez ajax bez konieczności robienia czegokolwiek.

Z nowym onwiązaniem jQuery :

$('#page').on('dragstart', 'img', function(event) { event.preventDefault(); }); (dzięki @ialphan)


1
Użycie .on będzie wyglądało tak: $ (document) .on ('dragstart', 'img', function (e) {e.preventDefault ();});
ialphan

To jest właściwe rozwiązanie. Jedno wydarzenie wiążące dla nieograniczonej liczby imgelementów, obecnych lub przyszłych. Najmniej intensywny, najbardziej wytrzymały.
niedźwiedź


4

Świetne rozwiązanie, miał jeden mały problem z konfliktami, jeśli ktoś inny ma konflikt z innej biblioteki js, po prostu nie włączaj takiego konfliktu.

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

Mam nadzieję, że to komuś pomoże.


3

Cóż, nie wiem, czy odpowiedzi tutaj pomogły wszystkim, czy nie, ale oto prosta sztuczka CSS, która zdecydowanie pomoże ci wyłączyć przeciąganie i zaznaczanie tekstów na stronie HTML.

Na swojej <body>tag Dodaj ondragstart="return false". Spowoduje to wyłączenie przeciągania obrazów. Ale jeśli chcesz również wyłączyć zaznaczanie tekstu, dodaj onselectstart="return false".

Kod będzie wyglądał następująco: <body ondragstart="return false" onselectstart="return false">


3

Możesz uznać moje rozwiązanie za najlepsze. Większość odpowiedzi nie jest zgodna ze starymi przeglądarkami, takimi jak IE8, ponieważ e.preventDefault () nie będzie obsługiwany, podobnie jak zdarzenie ondragstart . Aby to zrobić w przeglądarce, musisz zablokować zdarzenie mousemove dla tego obrazu. Zobacz przykład poniżej:

jQuery

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

bez 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 });
}

przetestowane i działające nawet dla IE8


3

Ustaw następujące właściwości CSS na obrazie:

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

1
Wygląda na to, że nie działa w przeglądarce Firefox (Mac Mac 69)
Ben Wheeler,

2

Cóż, jest to możliwe, a pozostałe opublikowane odpowiedzi są całkowicie poprawne, ale można zastosować podejście brutalnej siły i zapobiec domyślnemu zachowaniu mousedownobrazów. Który polega na rozpoczęciu przeciągania obrazu.

Coś takiego:

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


2

Możesz do tego użyć kodu wbudowanego

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

Drugą opcją jest użycie zewnętrznego lub na stronie 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">

Oba działają poprawnie Używam zewnętrznego css na tej stronie (kliknij tutaj)


Żaden z nich nie działa na Firefox (przy użyciu Maca Firefox 69)
Ben Wheeler,

2

jQuery:

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

Możesz zastąpić selektor nadwozia dowolnym innym pojemnikiem, którego dzieci nie mogą zostać przeciągnięte i upuszczone.


1

Odpowiedź jest prosta:

<body oncontextmenu="return false"/>- wyłącz kliknięcie prawym przyciskiem myszy <body ondragstart="return false"/>- wyłącz przeciąganie myszy <body ondrop="return false"/>- wyłącz upuszczanie myszy


-1

Zrobiłem pokazane tutaj właściwości css, a także monitorowałem ondragstart za pomocą następującego javascript:

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

-2

Kradnąc z mojej własnej odpowiedzi , po prostu dodaj do obrazu całkowicie przezroczysty element o tym samym rozmiarze. Podczas zmiany rozmiaru obrazu pamiętaj o zmianie rozmiaru elementu.

Powinno to działać w przypadku większości przeglądarek, nawet starszych.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.