2016-07-01 8 views
1

Ich habe eine Visualisierung, die im Wesentlichen eine Reihe von gestapelten Balkendiagrammen ist, von denen jedes mehrere Panels enthält. Zum Beispiel sind here drei solche Balkendiagramme mit jeweils vier Panels.D3: Umgang mit Zoom und Tooltips in einem einzigen Diagramm?

Ich habe es geschafft, Schwenk/Zoom-Funktionalität zu implementieren, die über die Diagramme koordiniert wird. This ist, wie es aussieht, wenn ich zum Beispiel aus dem letzten Bild in das dritte Bild zoome. Das Zoom-Verhalten wird von einem unsichtbaren Rechteck aufgerufen, das über jedem Diagramm platziert wird.

Mein Problem ist, dass ich Tooltip-Funktionalität basierend auf dem Speicherort des Cursors des Benutzers in einem Diagramm aktivieren möchte. Da die Zoomrechtecke jedoch über den Charts liegen, werden in den eigentlichen Charts selbst keine Mausereignisse für SVG-Elemente registriert.

Des kann jemand einen Weg um dies wissen?

+1

Haben Sie dieses Problem gelöst? Wenn das so ist, wie? – windup

+0

Ich habe genau das gleiche Problem hier ... hoffe jemand kann uns helfen – user3781258

Antwort

0

Sie können das Mausereignis wahrscheinlich auf dasselbe Rechteck setzen, das Sie zum Erkennen des Zooms verwenden. Schwer sicher zu sagen, ohne eine Codebeispiel, aber ich würde erwarten, dass Sie etwas in diese Richtung tun:

svg.select("rect.overlay") 
    .on("mouseover.tooltip", function() { tooltip.style("display", null); }) 
    .on("mouseout.tooltip", function() { tooltip.style("display", "none"); }) 
    .on("mousemove.tooltip", mousemoveFunc); 

den „.tooltip“ zum Ereignisse hinzufügen, wird einen Namespace auf das Ereignis, so dass, wenn Sie am Ende Wenn Sie eine Kollision mit Ihren Zoom-Listenern haben, können Sie ihnen auch einen Namespace hinzufügen.

0

In Ihrem CSS legen Sie den Stil Ponter-Events: keine für Ihre Zoom Rechtecke. Auf diese Weise werden die Cursor-Ereignisse von den Elementen erfasst.

+1

Danke für Ihre Antwort. Das Problem ist, dass ich die Zoomrechtecke brauche, um Zeigerereignisse noch zu registrieren. Ihr Hauptzweck besteht darin, ein Zoom-Verhalten auszulösen, wenn der Benutzer seinen Cursor über das Diagramm bewegt und einen Seitenlauf ausführt. Wenn also "pointer-events: none" gesetzt ist, können die folgenden Elemente Mausereignisse erkennen, wodurch die Zoomfunktionalität unterbrochen wird. – tddevlin