Frage

ein vorhandenes gültiges SVG-Dokument gegeben, was der beste Weg ist „Informations Popups“ zu schaffen, so dass, wenn Sie auf bestimmte Elemente schweben oder klicken Sie auf (sagen wir mal) Sie einen Kasten mit einer beliebigen Menge Popup (also nicht nur eine einzige Zeile Tooltip) zusätzliche Informationen?

Dies sollte korrekt zumindest in Firefox angezeigt werden und unsichtbar sein, wenn das Bild zu einem Bitmap-Format gerastert wurde.

War es hilfreich?

Lösung

<svg>
  <text id="thingyouhoverover" x="50" y="35" font-size="14">Mouse over me!</text>
  <text id="thepopup" x="250" y="100" font-size="30" fill="black" visibility="hidden">Change me
    <set attributeName="visibility" from="hidden" to="visible" begin="thingyouhoverover.mouseover" end="thingyouhoverover.mouseout"/>
  </text>
</svg>

Weitere Erläuterungen finden Sie

Andere Tipps

Da das <set> Element funktioniert nicht mit Firefox 3, ich glaube, Sie haben ECMAScript zu verwenden.

Wenn Sie das folgende Skript Element in Ihre SVG hinzufügen:

  <script type="text/ecmascript"> <![CDATA[

    function init(evt) {
        if ( window.svgDocument == null ) {
        // Define SGV
        svgDocument = evt.target.ownerDocument;
        }
        tooltip = svgDocument.getElementById('tooltip');
    }

    function ShowTooltip(evt) {
        // Put tooltip in the right position, change the text and make it visible
        tooltip.setAttributeNS(null,"x",evt.clientX+10);
        tooltip.setAttributeNS(null,"y",evt.clientY+30);
        tooltip.firstChild.data = evt.target.getAttributeNS(null,"mouseovertext");
        tooltip.setAttributeNS(null,"visibility","visible");
    }

    function HideTooltip(evt) {
        tooltip.setAttributeNS(null,"visibility","hidden");
    }
    ]]></script>

Sie müssen onload="init(evt)" in das SVG-Element hinzufügen, um die init () Funktion aufzurufen.

Dann bis zum Ende des SVG, fügen Sie den Tooltip-Text:

<text id="tooltip" x="0" y="0" visibility="hidden">Tooltip</text>

Schließlich, um jeweils das Element, das Sie die Mouseover-Funktion Add haben wollen:

onmousemove="ShowTooltip(evt)"
onmouseout="HideTooltip(evt)"
mouseovertext="Whatever text you want to show"

Ich habe eine ausführlichere Erklärung mit verbesserter Funktionalität unter http: // www.petercollingridge.co.uk/interactive-svg-components/tooltip

habe ich noch nicht mehrzeiligen Tooltips enthält, die mehr <tspan> Elemente und manuellen Zeilenumbruch erfordern würde.

Dies sollte funktionieren:

nodeEnter.append("svg:element")
   .style("fill", function(d) { return d._children ? "lightsteelblue" : "#fff"; })
   .append("svg:title")
   .text(function(d) {return d.Name+"\n"+d.Age+"\n"+d.Dept;}); // It shows the tool tip box with item [Name,Age,Dept] and upend to the svg dynamicaly
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top