Erfassen Sie Mausereignisse vom Geschwister- oder Eltern-DOM-Element in PIXI.js

9

Ich möchte Mausereignisse auf zwei Ebenen erfassen: PIXIs Leinwand und und überlagerndes div. Ich habe die folgende Art von HTML-Setup, wobei div.overlay über canvas.pixi :

liegt %Vor%

PIXI-Interaktion funktioniert gut, wenn canvas oben ist, aber ich kann keine Ereignisse erfassen, wenn die Zeichenfläche mit div.overlay überlagert ist.

Ich habe setTargetElement gefunden, mit denen wir das DOM-Element für Capture-Elemente definieren können, und ich habe versucht, es so zu verwenden:

%Vor%

Mit dieser Technik kann ich mousemove -Ereignisse erfassen, aber leider funktionieren click , mousedown , usw. nicht.

Ich habe auch versucht, die ursprünglichen Ereignisse zu kopieren, die auf div.overlay aufgenommen wurden, und dupliziere die Ereignisse auf canvas , wie unten gezeigt, aber das macht auch keinen Sinn.

%Vor%

Gibt es eine Möglichkeit, Mausereignisse auf einem überlagerten DOM-Element zu erfassen und die Ereignisse an PIXI zu übergeben?

Warum?

Ich würde gerne mit PIXI-Elementen interagieren und gleichzeitig die Zoom- und Pinsel-Funktionen von D3 nutzen, die derzeit auf dem überlagernden div behandelt werden.

Aktualisierung & amp; Codebeispiel

Ich habe es geschafft, Ereignisse weiterzuleiten und alle, außer Klickereignisse, werden von PIXI registriert. Klick-Ereignisse können manuell ausgelöst werden, indem die Ereignisse pointerdown und pointerup erneut ausgelöst werden. Besuche Ссылка

    
F Lekschas 01.12.2017, 01:58
quelle

4 Antworten

0

Ich habe es für mouseover , mouseout , mousedown , mouseup und click ausgelöst, indem ich die Ereignisse geklont habe und click -Ereignisse von mousedown und mouseup -Ereignissen rekonstruiert habe. Alle außer click -Ereignisse funktionieren beim Klonen von Ereignissen aus der Ereignisschicht standardmäßig, aber Klickereignisse werden nicht ausgelöst.

Also die folgende HTML-Struktur gegeben:

%Vor%

Ich höre mir eine Reihe von Ereignissen an:

%Vor%

Und dann Weiterleiten / Klonen der Ereignisse:

%Vor%

Das Ereignis kann auch an anderer Stelle ausgelöst werden, z. B. von D3 erkannt werden.

Demo : Ссылка

Die obere linke Ecke zeigt, wie es funktioniert, wenn Sie Ereignisse direkt mit PIXI abfangen. Oben rechts zeigt das Problem beim Klonen von Ereignissen. Unten links zeigt ein merkwürdiges Verhalten, bei dem das erneute Auslösen der gleichen Ereignisse dazu führt, dass PIXI Klickereignisse erkennt und schließlich unten rechts.

    
F Lekschas 16.12.2017, 18:37
quelle
2

Eine mögliche Lösung besteht darin, alle Ereignisse am Elternelement zu erfassen und sie zurück zu den untergeordneten Elementen zu verschieben. So was. Dies geschieht für den Klick, funktioniert auch für mousevove.

%Vor% %Vor%
    
John Bravo 14.12.2017 07:49
quelle
1

Wenn Sie nur Ereignisse durch das Overlay weiterleiten möchten, verwenden Sie css pointer-events: none; .
Mehr Details hier: Ссылка

    
Bsalex 01.12.2017 02:28
quelle
1

Das Problem ist, dass das DOM hierarchisch ist. Hier ist ein altes Problem über genau die gleiche Sache . Es stellt sich heraus, dass Sie Ereignisse nicht einfach auf Geschwister übertragen können, nur Eltern und Kinder. Ich würde vorschlagen, Ihre canvas in die .overlay zu setzen, dann können Sie sie sowohl erfassen als auch in der Bubbling-Phase abfangen, je nachdem, ob Sie mit denen vor oder nach der Zeichenfläche umgehen möchten.

Ich denke, das unten sollte wie erwartet funktionieren.

HTML:

%Vor%

Beispiel JS:

%Vor%     
HeinousTugboat 14.12.2017 14:50
quelle

Tags und Links