2015-02-08 76 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