javascript - Svg 文本元素被另一个 svg 元素重叠

标签 javascript jquery css svg d3.js

我现在正在制作饼图,大部分已经完成。

无论如何,我正在尝试在每个饼图切片上实现一些悬停效果,但我遇到了一个我无法解决的问题。当您将鼠标悬停在某个元素上时,文本会变大,并使用滤镜添加黑色背景。这样做的问题是文本有时会隐藏在其他元素后面,就好像这些元素在它上面一样。解决此问题的最佳解决方案是增加可见性并使其变得重要。

.pieChart svg>g text.hover {
  font-size: 1.3em;
  fill: #fff;
  filter: url(#pieTextFilter);
  visibility: visible !important;
}

但是,这并不能解决我的问题。

这是一个代表问题的 jsfiddle(将鼠标悬停在切片 4 上):http://jsfiddle.net/tinygram/22o1epyp/3/

如果您熟悉 D3,请务必注意,这仅在我更新图表后才会发生。如果您查看我的 jsfiddle 的底部,您会看到我正在启动图表,然后使用一些更新的数据再次运行它。我注意到这会在 dom 中的 svg 末尾添加一个新的 and 。老实说,我不知道这是否重要,但我想我应该提一下。

最佳答案

正如@LarsKotthoff 在他的评论中提到的那样,一切都按顺序进行。您最初构建了一个包含 4 个切片的饼图,然后添加了第 5 个切片。所以enter selection首先添加4个切片和4个标签。添加第 5 个切片时,它会更新前 4 个切片/标签并输入第 5 个切片/标签。然后在第 4 个标签的顶部添加第 5 个切片。

查看此 fiddle .问题消失了,因为我调用了导出:

tests(data);
tests({});
tests(data2);

更好的解决方法可能是在更新前删除所有文本:

tests(data);
d3.selectAll('text').remove();
tests(data2);

关于javascript - Svg 文本元素被另一个 svg 元素重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387189/

相关文章:

javascript - 删除元素的内容但保留相同的子元素

javascript - 链接到 Accordion 中的另一个选项卡,嵌入式链接将不起作用

javascript - 根据数组中的值动态更改 CSS

javascript - Firebase数据结构思想

javascript - 在 Redux 中实现撤销/重做

javascript - D3 中的饼图( donut )图段顺序

javascript - 蒲公英数据表scrollX不起作用

使用 jQueryUI.autocomplete 和 Backbone JS 的 Javascript 模块

html - 为什么这个页面的背景不是黑色的?

CSS3 文本(艺术字)效果