2014-08-27 10 views
10

Wie Stoppen der Ereignisausbreitung in Hammer.js (2.0.2)? Die im relevanten Test verwendete Technik (https://github.com/hammerjs/hammer.js/blob/master/tests/unit/test_propagation.js) gilt nicht für alle Arten von Ereignissen. Wenn Sie das Ereignis "Tippen" durch "Drücken" ersetzen, schlägt der Test fehl.Wie hammer.js Ereignispropagierung zu stoppen

+1

FWIW Die Technik im Komponententest funktioniert gut für Swipe-Events, also danke @nlyk, dass du mich darauf aufmerksam gemacht hast! Hammer.js Leute, es scheint eine Schande, dass die neue, glänzende Version der Bibliothek das schwieriger macht als zuvor. –

+0

Die Seite Tipps und Tricks http://hammerjs.github.io/tips/ beschreibt, dass Sie die Option {domEvents: true} festlegen müssen, um stopPropagation zu aktivieren. Ich habe das bisher nicht funktioniert –

Antwort

0

Überprüfen Sie in Ihrem übergeordneten Element, was das event.target ist. Wenn es nicht das übergeordnete Element ist und auf das untergeordnete Element festgelegt ist, ignorieren Sie das Ereignis.

zB: if (event.target! = Übergeordnet) { return; }

0

Um dieses Problem zu lösen, schrieb ich eine kleine mixin hammer.js mit Ereignispropagierung zu erweitern:

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

+1

Weißt du, was die Motivation war, hammer.js so umzuschreiben? Warum sind die Ereignisse nicht an das DOM gebunden? – gipouf

+1

Leistung kann besser sein, wenn Sie nur JS und kein DOM haben. Und es ist einfacher zu bauen, ohne mit dem DOM zu rechnen. Es ist auch kein sehr gebräuchlicher Anwendungsfall, um Ereignisweiterleitung zu benötigen, und es ist eine Art Anti-Muster zugunsten der Ereignisdelegierung, bei der ein einziges Elternteil alle Ereignisse behandelt. Aber manchmal macht es dein Leben leichter. Dies kann notwendig sein, wenn unabhängige Komponenten vorhanden sind. –

0

In Ihrer Eltern dom binden Click-Ereignis, und stopPropagation es