Как создать SVG-подобную подсказку? - PullRequest
38 голосов
/ 19 сентября 2008

Учитывая существующий действующий документ SVG, каков наилучший способ создания «информационных всплывающих окон», чтобы при наведении курсора или нажатии на определенные элементы (скажем,) вы всплыли в окне с произвольным количеством (т. Е. Не одной строкой) всплывающая подсказка) дополнительной информации?

Это должно правильно отображаться, по крайней мере, в Firefox и быть невидимым, если изображение было растеризовано в растровый формат.

Ответы [ 4 ]

48 голосов
/ 16 октября 2012

Этот вопрос был задан в 2008 году. SVG быстро улучшился за прошедшие четыре года. Теперь всплывающие подсказки полностью поддерживаются на всех известных мне платформах. Используйте тег <title> (не атрибут), и вы получите собственную подсказку.

Вот документы: https://developer.mozilla.org/en-US/docs/SVG/Element/title

24 голосов
/ 20 сентября 2008
<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>

Дополнительное объяснение можно найти здесь .

2 голосов
/ 28 января 2011

Поскольку элемент <set> не работает с Firefox 3, я думаю, что вы должны использовать ECMAScript.

Если вы добавите следующий элемент скрипта в SVG:

  <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>

Вам нужно добавить onload="init(evt)" в элемент SVG для вызова функции init ().

Затем в конец SVG добавьте текст всплывающей подсказки:

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

Наконец, к каждому элементу, для которого вы хотите добавить функцию наведения мыши, добавьте:

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

Я написал более подробное объяснение с улучшенной функциональностью на http://www.petercollingridge.co.uk/interactive-svg-components/tooltip

Я еще не включил многострочные всплывающие подсказки, для которых потребовалось бы несколько элементов <tspan> и перенос слов вручную.

1 голос
/ 21 августа 2013

Это должно работать:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...