2009-06-29 19 views
33

Ponieważ używam jQuery, każde rozwiązanie za jego pośrednictwem też by działało. Idealnie, chciałbym jednak wiedzieć jedno i drugie.Jak zapobiec przewijaniu za pomocą klawiszy strzałek, ale NIE myszy?

Mam już klawisze strzałek powiązane z inną funkcją na mojej stronie (przy użyciu jQuery), ale posiadanie ich powoduje przewijanie strony oprócz tego powoduje problemy.

Mogłem wiedzieć o tym za jednym razem, ale już go nie pamiętam.

+0

To bardzo źle zaprojektowany interfejs użytkownika, aby zapobiec przewijaniu aktywnej ramki klawiszami klawiatury. Ja (i wiele innych osób) przeglądam głównie za pomocą klawiszy i bardzo frustrujące jest używanie myszy na nieparzystej stronie tu i tam, która blokuje właściwą nawigację za pomocą klawiatury. Oczywiście, istnieją prawdopodobnie ważne powody, aby to zrobić, ale powinieneś upewnić się, że twój jest jednym z nich. –

+16

To jest. Moja aplikacja internetowa jest edytorem; nie jest formalną stroną internetową. –

+4

W pełni zgadzam się, że to złe projektowanie UI, aby zawsze zapobiegać standardowemu zachowaniu przeglądarki. Ale w pewnych sytuacjach jest całkiem dobrze, imho. W moim przypadku potrzebuję go, aby zapobiec przewijaniu strony, gdy użytkownik przechodzi między alternatywami na liście. Gdy fokus znajduje się poza listą, strona przewija się normalnie. Wewnątrz listy strona będzie unikać przewijania, chyba że będzie potrzebna do wyświetlenia wybranego elementu. –

Odpowiedz

75

Dodanie obsługi naciśnięcia klawisza na poziomie dokumentu pozwala na łatwe!

var ar=new Array(33,34,35,36,37,38,39,40); 

$(document).keydown(function(e) { 
    var key = e.which; 
     //console.log(key); 
     //if(key==35 || key == 36 || key == 37 || key == 39) 
     if($.inArray(key,ar) > -1) { 
      e.preventDefault(); 
      return false; 
     } 
     return true; 
}); 
+0

Och schludny. Lemme daj mu szansę ... –

+7

Obsługuje PgUp (33), PgDn (34), Koniec (35), Dom (36), Lewo (37), Góra (38), Prawo (39), Dół (40) – TheVillageIdiot

+0

Yay! Wielkie dzięki. –

1

Jeśli dodać dokument poziom obsługi przyciśnięcie pozwoli uniknąć normalnego przewijania strony w dowolnym momencie, a nie tylko wtedy, gdy element ma ostrość, to może być niepożądany efekt.

2

W pewnych okolicznościach, np. kiedy właściwie nie masz elementu, na którym się skupiasz, wystarczy, że klikniesz na jakiś obszar, możesz nie mieć zbyt dużej kontroli nad treserem, a zapobieganie wydarzeniu na poziomie globalnym może być w najlepszym wypadku trochę niestabilne (co znalazłem na twardą drogę).

Najprostszym rozwiązaniem w tych przypadkach jest powiązanie kliknięcia nawet z przyciskiem sterującym i skupienie się na pustym elemencie wejściowym, który ustawia się w pozycji -9000px w lewo.

Następnie można niezawodnie zablokować zdarzenie za pomocą keydown, a także nie musisz martwić się o blokowanie domyślnego zachowania lub innych globalnych detektorów, ponieważ domyślne zachowanie elementu wejściowego spowoduje przesunięcie kursora w lewo i prawo.