2014-08-27 13 views
10

Jak zatrzymać propagację zdarzeń w pliku Hammer.js (2.0.2)? Technika zastosowana w odpowiednim teście (https://github.com/hammerjs/hammer.js/blob/master/tests/unit/test_propagation.js) nie ma zastosowania do wszystkich rodzajów zdarzeń. Jeśli zastąpisz zdarzenie "dotknij" przyciskiem "naciśnij", test się nie powiedzie.Jak zatrzymać propagację zdarzeń hammer.js

+1

FWIW technika w teście jednostkowym działa dobrze w przypadku zdarzeń machnięcia, więc dziękuję @nlyk za zwrócenie mi tej uwagi! Ludzie z Hammer.js, szkoda, że ​​nowa, błyszcząca wersja biblioteki sprawia, że ​​jest to trudniejsze niż wcześniej. –

+0

Strona z poradami i podstępami http://hammerjs.github.io/tips/ opisuje, że musisz ustawić opcję {domEvents: true}, aby włączyć stopPropagation. Nie mam tej pracy do tej pory –

Odpowiedz

0

W swoim elemencie nadrzędnym sprawdź, co to jest event.target. Jeśli nie jest to element nadrzędny i jest ustawione na dziecko, zignoruj ​​zdarzenie.

np .: jeśli (event.target! = Parent) { return; }

0

W celu rozwiązania tego problemu napisałem małą mixin przedłużenia hammer.js z propagacji zdarzenia:

https://github.com/josdejong/propagating-hammerjs

+1

Czy wiesz, jaka była motywacja do przepisania pliku hammer.js w ten sposób? dlaczego wydarzenia nie są ograniczone do DOM? – gipouf

+1

Wydajność może być lepsza, jeśli masz tylko JS i brak DOM. I łatwiej jest budować bez konieczności liczyć się z DOM. Nie jest to również bardzo powszechny przypadek użycia propagacji zdarzeń i jest to pewien antytyp na rzecz delegowania zdarzeń, w którym pojedynczy rodzic przetwarza wszystkie zdarzenia. Ale czasami to * naprawdę * ułatwia życie. Może to być konieczne w przypadku posiadania samodzielnych komponentów. –

0

W swojej macierzystej dom wiążą kliknij zdarzenie i stopPropagation nim