Zrobiłem kontrolkę stronicowania i zauważyłem, że klikając na przyciski bardzo łatwo jest przypadkowo zaznaczyć poszczególne obrazy i tekst. Czy można temu zapobiec?
Aby wyjaśnić wybór, mam na myśli podświetlanie myszką. (Spróbuj przeciągnąć mysz z jednej strony ekranu na drugą.)
Jeśli spróbujesz zaznaczyć tekst / elementy sterujące w tej siatce, nie można ich wybrać. Jak to się robi? Połączyć
javascript
jquery
The Muffin Man
źródło
źródło
Odpowiedzi:
przeciąganie i wybieranie zarówno inicjowania po naciśnięciu myszy, jak i aktualizacji przy kolejnych ruchach myszy. Kiedy obsługujesz zdarzenia, aby rozpocząć przeciąganie lub podążać za myszą, anuluj propagację zdarzenia i nadpisz domyślny zwrot przeglądarki:
coś takiego w swoim początku przeciągania myszy w dół i przenoszenia uchwytów-
function pauseEvent(e){ if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble=true; e.returnValue=false; return false; }
źródło
user-select: none;
to jest to, czego używam. Myślę, że nie ma już potrzeby rozwiązywania tego problemu przez JSDo przeciągania przechwytujesz zdarzenia
mousedown
imousemove
. (I miejmy nadziejętouchstart
itouchmove
wydarzeń, a także, do interfejsów dotykowych wsparcie).Musisz zadzwonić
event.preventDefault()
w obudown
imove
wydarzeń w celu utrzymania przeglądarkę od wyboru tekstu.Na przykład (używając jQuery):
var mouseDown = false; $(element).on('mousedown touchstart', function(event) { event.preventDefault(); mouseDown = true; }); $(element).on('mousemove touchmove', function(event) { event.preventDefault(); if(mouseDown) { // Do something here. } }); $(window.document).on('mouseup touchend', function(event) { // Capture this event anywhere in the document, since the mouse may leave our element while mouse is down and then the 'up' event will not fire within the element. mouseDown = false; });
źródło
window.document
iwindow
czy po prostudocument
? Jestem prawie pewien, żedocument
jest dzieckiemwindow
…window
to najbardziej zewnętrzny zakres, w którym JavaScript działa w przeglądarce. Zatem każda zmienna, która nie została zadeklarowana wewnątrz funkcji, jest własnościąwindow
. Odwoływanie siędocument
bezpośrednio faktycznie odnosząc sięwindow.document
.To jest bardzo stary post. Może nie odpowiadać dokładnie na tę sytuację, ale używam CSS do mojego rozwiązania:
źródło
Chciałem to skomentować, ale nie mam wystarczającej reputacji. Użycie sugerowanej funkcji z @kennebec rozwiązało mój problem w mojej bibliotece do przeciągania javascript. Działa bez zarzutu.
function pauseEvent(e){ if(e.stopPropagation) e.stopPropagation(); if(e.preventDefault) e.preventDefault(); e.cancelBubble=true; e.returnValue=false; return false; }
nazwałem to w funkcji niestandardowej Mousedown i Mousemove, natychmiast po rozpoznaniu kliknięcia odpowiedniego elementu. Jeśli wywołuję to tuż obok funkcji, po prostu zabijam każde kliknięcie dokumentu. Moja funkcja jest zarejestrowana jako zdarzenie w witrynie document.body.
źródło
Spróbuj tego:
document.onselectstart = function() { window.getSelection().removeAllRanges(); };
źródło
selectstart
Wydarzenie nie istnieje w Firefoksie.Można to osiągnąć za pomocą CSS w większości przeglądarek i
unselectable
rozszerzenia w IE. Zobacz moją odpowiedź tutaj: Jak wyłączyć podświetlanie zaznaczenia tekstu za pomocą CSS?źródło
po prostu temu zapobiegaj, wywołując funkcję blur () po wybraniu w następujący sposób:
<input Value="test" onSelect="blur();">
źródło
Jeśli potrzebujesz zablokować zaznaczanie tekstu dla określonego elementu za pomocą JavaScript, to najprostszą metodą dla mnie było przypisanie stylu userSelect w następujący sposób:
var myElement = document.createElement('div'); myElement.style.userSelect = 'none';
źródło