44

给定一个现有的有效 SVG 文档,创建“信息弹出窗口”的最佳方法是什么,这样当您悬停或单击某些元素(比如说)时,您会弹出一个带有任意数量(即不仅仅是单行工具提示)的框额外的信息?

这应该至少在 Firefox 中正确显示,并且如果图像被光栅化为位图格式,则它是不可见的。

4

4 回答 4

52

这个问题是在 2008 年提出的。在这四年间,SVG 得到了迅速的改进。现在我知道的所有平台都完全支持工具提示。使用<title>标签(不是属性),您将获得本机工具提示。

以下是文档: https ://developer.mozilla.org/en-US/docs/SVG/Element/title

于 2012-10-15T22:11:13.293 回答
25
<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>

进一步的解释可以在这里找到。

于 2008-09-19T21:07:58.083 回答
2

由于该<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>元素和手动换行。

于 2011-01-28T18:52:39.280 回答
1

这应该有效:

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
于 2013-08-21T08:35:16.617 回答