@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?
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:
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
+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
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.
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.
Ś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();});
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">
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){returnfalse});// 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){returnfalse});}elseif(my_image.attachEvent){
my_image.attachEvent("onmousemove",function(e){returnfalse});}
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.
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.
Odpowiedzi:
Możesz to polubić ...
Zobacz, jak działa (a raczej nie działa)
Wygląda na to, że używasz jQuery.
źródło
$(document)
zamiast$(window)
$('img').on('dragstart', false);
The value false is also allowed as a shorthand for a function that simply does return false.
Rozwiązanie tylko CSS: użyj
pointer-events: none
https://developer.mozilla.org/en-US/docs/CSS/pointer-events
źródło
img
.po prostu dodaj draggable = "false" do tagu obrazu:
IE8 i poniżej nie obsługuje jednak.
źródło
źródło
najprostszym rozwiązaniem dla wielu przeglądarek jest
problem z
jest to, że nie działa w Firefox
źródło
Użyłem go na mojej stronie internetowej http://www.namdevmatrimony.in/ To działa jak magia !!! :)
źródło
Spróbowałem i okazało się, że to działa.
Jestem pewien, że wyłącza to przeciąganie wszystkich obrazów. Nie jestem pewien, czy wpływa to na coś innego.
źródło
<a>
znacznik? Jeśli użytkownik kliknie obraz, link nie zostanie kliknięty.Zobacz tę odpowiedź ; w Chrome i Safari możesz użyć następującego stylu, aby wyłączyć domyślne przeciąganie:
Możesz spróbować wybrać użytkownika dla przeglądarki Firefox i IE (10+):
źródło
Możesz dodać następujące elementy do każdego obrazu, którego nie chcesz przeciągać (wewnątrz
img
tagu):na przykład
źródło
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.
źródło
Bezpośrednio użyj tego:
ondragstart="return false;"
w swoim tagu obrazu.Jeśli masz wiele zdjęć zawiniętych w
<div>
tag:Działa we wszystkich głównych przeglądarkach.
źródło
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
on
wiązaniem jQuery :$('#page').on('dragstart', 'img', function(event) { event.preventDefault(); });
(dzięki @ialphan)źródło
img
elementów, obecnych lub przyszłych. Najmniej intensywny, najbardziej wytrzymały.źródło
Ś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.
Mam nadzieję, że to komuś pomoże.
źródło
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 Dodajondragstart="return false"
. Spowoduje to wyłączenie przeciągania obrazów. Ale jeśli chcesz również wyłączyć zaznaczanie tekstu, dodajonselectstart="return false"
.Kod będzie wyglądał następująco:
<body ondragstart="return false" onselectstart="return false">
źródło
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
bez jQuery
przetestowane i działające nawet dla IE8
źródło
Ustaw następujące właściwości CSS na obrazie:
źródło
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
mousedown
obrazów. Który polega na rozpoczęciu przeciągania obrazu.Coś takiego:
źródło
Działa w tym Plunker http://plnkr.co/edit/HbAbJkF0PVLIMjTmEZml
źródło
Możesz do tego użyć kodu wbudowanego
Drugą opcją jest użycie zewnętrznego lub na stronie css
Oba działają poprawnie Używam zewnętrznego css na tej stronie (kliknij tutaj)
źródło
jQuery:
Możesz zastąpić selektor nadwozia dowolnym innym pojemnikiem, którego dzieci nie mogą zostać przeciągnięte i upuszczone.
źródło
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źródło
Zrobiłem pokazane tutaj właściwości css, a także monitorowałem ondragstart za pomocą następującego javascript:
źródło
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.
źródło