2015-04-14 26 views
5

Potrzebuję zorganizować nawigację, taką jak jquery.fullPage: kiedy przewijam raz - przechodzę do następnej sekcji.Jak wyłączyć efekt wielokrotnego przewijania w zdarzeniu osx i przewinąć ogień raz na przewijanie

Próbowałem użyć do tego celu jquery.mousewheel, ale w MacOS z touchpadem lub trackpadem albo APPLE Magic Mouse nie działa: przewija wiele slajdów na jeden zwój.

Starałem się korzystać z tego rozwiązania: https://github.com/jquery/jquery-mousewheel/issues/36#issuecomment-67648897

Współpracuje w Chrome, ale nie w FF i ma błędów w Safari.

Jest to prosta demonstracja wydania: http://jsfiddle.net/ss5LueLx/13/

$slider.on('mousewheel', function(event) { 
    if (event.deltaY>0) { 
     slider.prevSlide(); 
    } else { 
     slider.nextSlide(); 
    } 
}); 

Odpowiedz

0

Przetestowałem to oświadczenie w przeglądarce SeaMonkey i to się nie powiedzie.

var delta = e.type == 'mousewheel' ? e.originalEvent.wheelDelta * -1 : 40 * e.originalEvent.detail; 

Tylko w przypadku, spojrzałem na deltaY i działa: +1 w jednym kierunku i -1 w drugiej, tak jak określa się w dwóch innych implementacjach masz.

console.log(e.deltaY); // view console in FireBug 

Patrząc na strukturę zdarzeń w Firebug, widzę, że typ zdarzenia jest „mouseWheel”, a mimo to nie widzę pola wheelData w originalEvent.

I chociaż istnieje pole szczegółów, ale ten pozostaje na poziomie zero.

Wyobrażam sobie, że próbujesz przejść do następnego przedmiotu tylko po osiągnięciu +/- 3. Proponuję coś w tym rodzaju, aby osiągnąć ten wyczyn:

// somewhere, initialize to zero 
var current_position = 0; 


// on mousewheel events 
current_position += e.deltaY; 

// you had a x 40 which would indicate that the limit is about 120/40 
// if 3 is too small, you can always increase it to 5 or event 10... 
if(current_position <= -3) 
{ 
    slider.nextSlide(); 
    current_position = 0; 
} 
else if(current_position >= 3) 
{ 
    slider.prevSlide(); 
    current_position = 0; 
} 

przeciwnym razie można sprawdzić, czy flaga allowScroll działa zgodnie z oczekiwaniami. Nie programuję obiektów w ten sposób, więc nie jestem zbyt pewny, czy jest poprawny, czy nie. (Używam składni prototype, która jest przydatna, jeśli chcesz przedłużyć klasy.)