2015-02-08 74 views
1

我有一个SVG“地图”,我想在鼠标悬停在矩形上时实现一个简单的工具提示。我想使用this plugin如何在Menucool JS插件的帮助下创建SVG工具提示?

这是我如何链接SVG到HTML:

<object data="map.svg" type="image/svg+xml" id="map" width="1840" height="940"></object> 

第一次尝试是这样的:

 var svgobject = document.getElementById('map'); 
     if ('contentDocument' in svgobject) {   
      var svgdom = $(svgobject.contentDocument); 
      $("#rect4578").tooltip.pop(this, '#ToltipContent'); 
     } 

而且提示容器如下:

<div style="display:none;"> 
    <div id="ToltipContent"> 
     <h2>Header</h2> 
     <img src="img/img.jpg" style="float:right;" /> 
      Some text 
    </div> 
</div> 

我还在插件网站上解释了将toolpip类添加到rect4578。但它没有奏效。

然后我尝试在SVG矩形的onmouseover属性内添加插件调用。

onmouseover="tooltip.pop('#rect4578', '#ToltipContent')" 

同时,我什么也没得到。

但是,如果我通过使用上述任何一种方法改变矩形的不透明度,它就可以工作。

而问题是什么是正确的方式来使用这个插件来实现工具提示的SVG?

谢谢。

回答

0

因为我没有访问你的对象,所以我使用了w3schools中的svg,它似乎工作正常。下面是我做得到它的工作:

.hide {display:none;} 
 
#object {width: 100px; overflow: hidden; margin: 0 auto;} 
 
#object svg {padding: 20px;} 
 
div#mcTooltip h2 { 
 
    margin-top: 10px; 
 
    line-height: 1; 
 
} 
 
#mcTooltip ul, #mcTooltip ol { 
 
    padding-left: 20px; 
 
} 
 
div#mcTooltip { 
 
    line-height: 16px; 
 
    border-width: 1px; 
 
    color: #333; 
 
    border-color: #bbb; 
 
    padding: 20px; 
 
    font-size: 12px; 
 
    font-family: Verdana, Arial; 
 
    border-radius: 6px; 
 
    box-shadow: 0 1px 4px #aaa; 
 
} 
 
div#mcTooltip, div.mcTooltipInner { 
 
    background-color: #eee; 
 
} 
 
div#mcTooltip a { 
 
    color: #069; 
 
} 
 
div#mcTooltip a:hover { 
 
    color: #333; 
 
} 
 
div#mcTooltipWrapper { 
 
    position: absolute; 
 
    visibility: hidden; 
 
    overflow: visible; 
 
    z-index: 9999999999; 
 
    top: 0; 
 
} 
 
div#mcTooltip { 
 
    float: left; 
 
    border-style: solid; 
 
    position: relative; 
 
    overflow: hidden; 
 
} 
 
div.mcTooltipInner { 
 
    float: left; 
 
    position: relative; 
 
    width: auto; 
 
    height: auto; 
 
} 
 
div#mcTooltip, div#mcTooltip div { 
 
    -webkit-box-sizing: content-box; 
 
    -moz-box-sizing: content-box; 
 
    box-sizing: content-box; 
 
} 
 
div#mcttCo { 
 
    position: absolute; 
 
    text-align: left; 
 
} 
 
div#mcttCo em, div#mcttCo b { 
 
    display: block; 
 
    width: 0; 
 
    height: 0; 
 
    overflow: hidden; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<script src="http://www.menucool.com/Content/widgets?v=pWIjgyLaRd3JgPu8kRMWTBEFhPIETaPsvP81TXLgnbE1"></script> 
 
<div class="hide"> 
 
    <div id="toolTipContent">Tooltip text goes here</div> 
 
</div> 
 
<br/> 
 
<br/> 
 
<br/> 
 
<object id="object" type="image/svg+xml" data="http://www.schepers.cc/svg/blendups/smiley.svg"><svg width="100" height="100"> 
 
    <rect width="100" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" onmouseover="tooltip.pop(this, '#toolTipContent', {position:2})" /> 
 
</svg><svg width="100" height="100"> 
 
    <rect width="100" height="100" style="fill:rgb(0,0,255);stroke-width:3;stroke:rgb(0,0,0)" onmouseover="tooltip.pop(this, '#toolTipContent', {position:2})" /> 
 
</svg><svg width="100" height="100"> 
 
    <rect width="100" height="100" style="fill:rgb(0,0,255);stroke-width:1;stroke:rgb(0,0,0)" onmouseover="tooltip.pop(this, '#toolTipContent', {position:2})" /> 
 
</svg></object>

+0

谢谢你的回答,不过,明星是不是一个提示里面?如果你进入plugun的页面,看看2. tooltip.pop(targetElement,'#contentElementId'[,options]) - 当你将这些文本悬停时,会弹出一个工具提示。并且该图片位于该工具提示内。另外,在你的例子中,我需要悬停一段文字才能看到图片,但实际上我需要悬停一个SVG区域(在我的例子中是一个正方形)来查看工具提示**。 – plywoods 2015-02-16 07:25:26

+0

它实际上是在工具提示中,但未包含CSS。我对它进行了更新,以便它现在具有CSS,并且还包含了一个我认为更符合您的描述的示例。再一次,我没有SVG对象来测试,所以我用我所拥有的最好的东西。这篇文章 - http://benfrain.com/selecting-svg-inside-tags-with-javascript/可能对您有一定的价值,如果您尝试定位SVG内容,但据我所知可以知道对象标签不应该成为问题。 – ReLeaf 2015-02-16 14:17:06

+0

嗯,问题是我需要这个工具提示出现,当我悬停一些SVG区域!不要文字!例如,您可以使用简单的SVG矩形(codepen中的某处)或您想要的地方!问题是我无法处理SVG的悬停事件。我有以下svg对象: \t \t <路径..... 我想使用它的ID或类,以调用悬停的工具提示!谢谢! – plywoods 2015-02-17 08:28:40

0

它看起来像你原来的方法的问题是对象标记不支持“的onmouseover” https://developer.mozilla.org/en-US/docs/Web/HTML/Element/object。我正在使用img标签。这是第一个答案的一个非常小的变化。

var svg = document.getElementById('kiwi'); 
 
svg.onmouseover = function() {tooltip.pop(this, '#tooltip');}
.hide {display:none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script> 
 
<script src="http://www.menucool.com/Content/widgets?v=pWIjgyLaRd3JgPu8kRMWTBEFhPIETaPsvP81TXLgnbE1"></script> 
 
<div class=""> 
 
    <img id="kiwi" height="200" width="200" src="http://s.cdpn.io/3/kiwi.svg"> 
 
</div> 
 
<div class="hide"> 
 
<span id="tooltip" > 
 
    This is a tooltip. 
 
</span> 
 
</div>

+0

马特,我认为你的例子不起作用! – plywoods 2015-02-17 18:17:32

+0

我知道很难告诉在页面中运行代码,因为窗口没有足够大来显示消息。运行代码片段,然后单击完整页面。 – matt 2015-02-18 03:06:05

+0

非常感谢!但是,ReLeaf的前面的代码显示了正确的解决方案! – plywoods 2015-02-18 06:02:43