2013-02-24 11 views
5

Buduję aplikację na iPada, która jest w zasadzie serią slajdów.Zapobieganie ruchomym zdarzeniom podczas interakcji z elementami na stronie

Po skończeniu czytania slajdu jestem w stanie przesunąć do następnego slajdu * (za pomocą przesunięcia Zepto), który zmienia window.location na następny slajd. (Zdarzenie przeciągnięcia jest związane z oknem. Ciało musi pracować na całej stronie) ...

Oto problem: niektóre slajdy mają elementy interaktywne, takie jak przyciski, elementy przeciągalne itp. Problem polega na tym, że zdarzenie przeciągania jest wyzwalane przy użyciu niektórych z tych interaktywnych elementów.

Czy ktoś wie, w jaki sposób zapobiec uruchamianiu machnięcia w tych przypadkach? Być może ustawienia czułości itp?

Jestem zakłopotany ...

Najlepsze życzenia i wielkie dzięki!

+0

Uważam, że zdarzenia przesunięcia są generowane poza zdarzeniami na poziomie dokumentu. Jeśli twoje elementy dotykowe * dotykają elementu 'stopPropigation()', powinno to zapobiec generowaniu zdarzenia przeciągnięcia. –

+0

Cześć kolego przepraszam za bycie tutaj grubym - czy mógłbyś to wytłumaczyć dla idioty (mnie!) :) Staram się zrozumieć ... – Chris

Odpowiedz

2

Sposób Zepto zarządza zdarzenia dotykowe jest to wiąże słuchaczy do touchstart, touchend i touchmove wydarzeń na document.body. Następnie wykonuje obliczenia, które zdarzenie ma zostać wysłane i wyzwala zdarzenie na elemencie, który otrzymał zdarzenie touchstart. To wydarzenie następnie pęcznieje w drzewie DOM, wywołując słuchaczy każdego elementu.

To daje nam dwa sposoby zapobiegania incydentom magnetycznych:

Po pierwsze, można zrobić coś takiego:

$('#my-child-element').bind('touchstart touchend touchup', function(event) { 
    event.stopPropagation(); 
}); 

Gdy elementem dziecko otrzymuje jeden dotykowy zdarzenie, to uniemożliwić rozmnożeniowego elementy nadrzędne, a przede wszystkim znacznik body. Zapobiega to wykonywaniu przez procesor dotykowy Zepto jakichkolwiek działań blokujących ruchy przeciągania, stuknięcia, singletTap, longTap i doubleTap podczas działania w tym elemencie.

Ponieważ zdarzenia swipe także bubble, można też po prostu zapobiec te konkretne zdarzenia z pęcherzyków do elementu, który słucha zmiana strony swipes:

$('#my-child-element').bind('swipeLeft swipeRight', function(event) { 
    event.stopPropagation(); 
}); 

To pozwoli Ci jeszcze otrzymać Zepto generowane wydarzenia wewnątrz element dziecka, ale nie na zewnątrz. Wydarzenia z funkcją Zepto dotkną również wszystkich elementów Twojego dziecka.

Fiddle tutaj: http://jsfiddle.net/bnickel/dUuUd/

0

Nadzieja "excludedElements" metoda pomoże, jak poniżej.

$(".block").swipe({ 
    swipe: function (event, direction, distance, duration, fingerCount, fingerData) { 

    }, 
    excludedElements: ".link, a", 
    threshold: 0 
}); 
Powiązane problemy