如何将Bootstrap提示框居中在SVG中

4
请您看一下这个JsFiddle,告诉我如何在SVG内部居中显示工具提示?我已经在这篇帖子上看到了相同的问题,但说实话,对我来说太难理解了!
以下是我的代码:
<div class="container">
 <div class="well">
  <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
 width="400px" height="400px" viewBox="0 0 400 400" enable-background="new 0 0 400 400" xml:space="preserve">
    <ellipse class="firststar" cx="200" cy="200" rx="150" ry="150"/>
   </svg>
 </div>
</div>

并且jQuery代码:

$('.firststar').tooltip({title:'Test SVG Centering', container:'.well', placement: 'top'});

其他问题及其答案到底有什么令人困惑的地方? - Robert Longson
嗨,Robert,感谢你的评论,我可以说代码的所有部分。如您所见,我有一个非常简单的SVG,并且我不知道如何在jquery部分中使用该代码?另外,我不知道'http://www.w3.org/2000/svg'是什么?正如其他人已经在问题上发布的那样,帖子只包含问题的很小一部分,难以完全理解。 - Mona Coder
你需要在你的 jQuery 拷贝中找到那个函数并修改它。 - Robert Longson
有没有什么想法来解决这个问题? - Mona Coder
好的,我现在明白了。无论如何,我根据bbill的评论更新了jsfiddle文件,它改变了工具提示的位置,但仍然没有居中! - Mona Coder
显示剩余3条评论
1个回答

2

以下是详细步骤:

  1. Download the Bootstrap source

  2. The question you linked to apparently has a solution to the bug in Boostrap. Copy the code for getPosition. Add a case for center in the tooltip switch (Ctrl+F for getPosition again, but find not the function, but its use), like so:

    case: 'center':
      tp = {top: pos.top + pos.height / 2 - actualHeight / 2, 
            left: pos.left + pos.width / 2 - actualWidth / 2}
      break
    
  3. Make sure to change the link in your HTML to reference the updated bootstrap.js file.

编辑:链接到可用的JFiddle。 Bootstrap代码已经改变,这是实现您想要的最简单的方法。


如果您对此修复的历史以及代码为什么能够正常工作感到好奇,您所链接的帖子中也有一些细节。正如罗伯特·朗森先生在一个错误报告中解释的那样(https://bugzilla.mozilla.org/show_bug.cgi?id=649285),SVG元素没有高度属性,但Bootstrap代码假定它们有。因此,他指出获取SVG元素高度的方法是$(element).getBBox().height (https://dev59.com/TGsz5IYBdhLWcg3w2Llt#9131261)。这就是您要粘贴的代码所做的事情。 - bbill
嗨bbill,感谢您的完美指导。我已经根据链接更新了代码库,并更新了jsfiddle链接,但是工具提示仍然没有显示在中心位置。实际上它位于顶部!您能告诉我这是为什么吗? - Mona Coder
我还删除了“placement:'top'”,但是工具提示仍然在SVG顶部弹出,而不是在中心。 - Mona Coder
1
根据文档,placement仅接受top、bottom、left和right。最好的选择是将其设置为right,然后更改您之前修改过的代码中的一行,使width = bbox.width / 2。 - Robert Longson
1
好的。也许更好的解决方案是去查看使用 getPosition 的地方,并在那里查看 switch 语句,添加一个 center case 并按照 right、top、left 等的示例,在元素中心添加一个工具提示。 - bbill
Robert和bbill,非常感谢你们帮我解决了这个问题,现在它已经可以正常工作了。再次感谢! - Mona Coder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接