如何创build一个SVG“工具提示”像框?
给定一个现有的有效的SVG文档,创build“信息popup窗口”的最好方法是什么,所以当你hover或点击某些元素(比方说),你popup一个任意数量的盒子(即不只是一个单一的工具提示)额外的信息?
这应该至less在Firefox中正确显示,并且在图像被栅格化为位图格式时不可见。
<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>
进一步的解释可以在这里find。
这个问题在2008年被问到。在这四年间,SVG已经快速地提高了。 现在工具提示在我意识到的所有平台上都得到完全支持。 使用一个<title>
标签(不是一个属性),你会得到一个本地的工具提示。
这里是文档: https : //developer.mozilla.org/en-US/docs/SVG/Element/title
由于<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>
最后,对每个你想要有鼠标hoverfunction的元素添加:
onmousemove="ShowTooltip(evt)" onmouseout="HideTooltip(evt)" mouseovertext="Whatever text you want to show"
我在http://www.petercollingridge.co.uk/interactive-svg-components/tooltip上用改进的function写了更详细的解释;
我还没有包括多行工具提示,这将需要多个<tspan>
元素和手动换行。
这应该工作:
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