2013-06-08 25 views
6

Jak zatrzymać propagację za pomocą detektora kółka myszy?rozmowa zatrzymania kółka myszy jquery

Przy użyciu kółka myszy nad elementem content cały dokument przewija zbyt

To nie działa

content.on('mousewheel', function(e, delta){ 
    content.scrollTop(content.scrollTop() - (40 * delta)); 
    set_bar(); 
    e.stopPropagation(); 
}); 

rozwiązanie

content.on('mousewheel', function(e, delta){ 
    content.scrollTop(content.scrollTop() - (40 * delta)); 
    set_bar(); 
    return false; 
}); 
+1

NIESAMOWITE! Ustawiłem stopPropagation, a następnie zwróciłem false. Jakiekolwiek wady, które znasz, zwracając wartość false? Nie miałem żadnych kłopotów, ale niewyraźnie pamiętam, jak czytałem o tym straszne ostrzeżenia. –

+7

Pomocne może okazać się przesunięcie rozwiązania do odpowiedzi, a następnie oznaczenie go jako rozwiązane. W ten sposób nie pojawi się w sekcji bez odpowiedzi. –

Odpowiedz

5

myślę, że są mylące stopPropgation i preventDefault .

  • stopPropagation powstrzymuje wydarzenie przed propagowaniem łańcucha zdarzeń.

  • preventDefault zapobiega domyślnej akcji na elemencie . W takim przypadku uniemożliwi to przewijanie, dla zdarzenia kliknięcia na zakotwiczenia, na przykład zatrzyma link prowadzący do adresu URL zdefiniowanego w atrybucie href.

  • return false z drugiej strony robi obie te rzeczy.

Jest to ważne rozróżnienie, ponieważ można użyć bulgotania zdarzeń do delegowania zdarzeń, jednocześnie zapobiegając domyślnej akcji w tym samym czasie.

Zobacz te dwa posty, aby uzyskać więcej informacji:

Difference between preventDefault and return false

Difference between preventDefault and stopPropagation

1

Oryginalny rozwiązanie jest prawie poprawne. Oto co pracował:

$(".myScrollableDiv").on("mousewheel",function(e) { 
     var scrollRate = 100; 
     var $t = $(this); 
     var dy = e.originalEvent.deltaY * scrollRate; 
     $t.scrollTop($t.scrollTop() + dy); 
     e.preventDefault(); 
    }); 

Myślę, że głównym powodem jest to, że jQuery nie daje nam drugi parametr (delta), ale można je znaleźć w samej imprezy. W przeciwnym razie jest w porządku.