- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 d3 (v5) 中制作了一个可折叠的树形图,可以在此处找到其简化版本:https://jsfiddle.net/philipnye/cwj9nkhr/ .
每个节点都有一个标签,但标签只显示在有足够空间的地方,不会相互重叠或太靠近 SVG 的边缘。在链接示例中,第一次加载标签仅出现在树形图的前两个深度。
requiredSpacing
用于估计需要多少空间,而 minSpacing
检查每个深度的节点之间存在的最小间距。
以下行定位节点和标签,具有过渡效果:
var nodeUpdate=nodeEnter.merge(node)
.transition()
.duration(function() {
if (loaded==0) {
return 0;
}
else {
return duration;
}
})
.attr("transform", function(d) {
return "translate(" + d.x + "," + d.y + ")";
});
nodeUpdate.select("circle")
.attr("r", function(d) {
return radiuses[d.depth];
})
.attr("class", function(d) {
if (d._children) {
return "filled";
} else {
return "unfilled";
}
});
nodeUpdate.select("text")
.style("fill-opacity", function(d) {
if (minSpacing[d.depth]<requiredSpacing[d.depth]*2 || (d.data.position=='left' && Math.ceil(d.x/5)*5-radiuses[d.depth]-requiredSpacing[d.depth]<margin.left) || (d.data.position=='right' && Math.ceil(d.x/5)*5+radiuses[d.depth]+requiredSpacing[d.depth]>width)) {
return 1e-6;
}
else {
return 1;
}
})
.attr("class", function(d) {
if (minSpacing[d.depth]<requiredSpacing[d.depth]*2 || (d.data.position=='left' && Math.ceil(d.x/5)*5-radiuses[d.depth]-requiredSpacing[d.depth]<margin.left) || (d.data.position=='right' && Math.ceil(d.x/5)*5+radiuses[d.depth]+requiredSpacing[d.depth]>width)) {
return "nodeLabel nonselectable";
}
else {
return "nodeLabel";
}
})
我将没有空间显示的标签的不透明度设置为 1e-6(以启用转换)并给它们一个 nonselectable
类,这意味着标签不能选择。但我实际上并没有删除它们 - 然后我遇到了问题,在某些情况下它们会重叠节点并且意味着无法单击节点以展开/折叠该点下方的树。查看比标记为 Male 和 Female 的节点深两层或三层的节点 - 只有三分之一到一半的节点可以单击。 (请注意,底部 层中的节点不可展开/折叠,因为它们没有子节点。)
我如何最好地删除这些标签,或者至少阻止它们阻止您点击节点?
我考虑过的事情:
nonselectable
的节点类,但这并不是最有效的方法,我已经在尝试实现时遇到了一些困难font-size
设置为接近于零。我试过了将类似下面的代码添加到我的 nodeUpdate
代码中,但它似乎会导致转换出现问题.attr("font-size", function(d) {
if (minSpacing[d.depth]<requiredSpacing[d.depth]*2 || (d.data.position=='left' && Math.ceil(d.x/5)*5-radiuses[d.depth]-requiredSpacing[d.depth]<margin.left) || (d.data.position=='right' && Math.ceil(d.x/5)*5+radiuses[d.depth]+requiredSpacing[d.depth]>width)) {
return '0.1em';
}
})
或者可能有另一种更好的方法来解决这个问题。
我应该怎么做?
最佳答案
只需为这些标签设置一个pointer-events: none;
:
.nonselectable {
pointer-events: none;
etc...
}
实际上,由于我看到标签不可点击,您可以将 pointer-events: none;
设置为 all。
这是更新后的 JSFidle:https://jsfiddle.net/e3j7ta4y/
关于javascript - 树形图——防止标签重叠节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55793602/
我在 d3 (v5) 中制作了一个可折叠的树形图,可以在此处找到其简化版本:https://jsfiddle.net/philipnye/cwj9nkhr/ . 每个节点都有一个标签,但标签只显示在有
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我正在尝试为 ZingCharts 动态创建此数据数组,但被难住了。 基本上,我需要制作这个结构: var series = [{ text: "Democratic", style: {
我正在尝试为我的树状图(内存)使用 firstKey() 方法。我的代码如下所示: import java.util.*; //Code in the middle. System.out.print
我正在尝试复制以下 D3 可缩放树形图,以便更好地了解 D3 的工作原理: https://secure.polisci.ohio-state.edu/faq/d3/zoomabletreemap.h
我正在使用 this post 中的示例树状图在我的工作中,但还想跟踪哪行/列来自哪条数据。 我已将数据名称记录编辑为 names ,如下所示,并希望打印距离矩阵可视化底部和右侧的名称。我尝试在对de
我使用 d3.js 组合了以下树状图。就选民投票率而言,它是前 20 名的州。 Link 我不确定如何将“值”添加到悬停中。理想情况下,它应该显示每个状态的唯一值。我可以为一个人(例如加利福尼亚州)做
我正在尝试在数据更新时动态更新我的 d3 树形图。我有两个函数,一个是我最初调用的用于构建树形图的函数,另一个是用于重绘树形图的函数。当我重新绘制树状图时,我在树状图顶部看到一个细黑条,并且我正在绘制
我正在尝试放置 2 个 d3.js 树形图,如此处所示 http://bl.ocks.org/1249394在一页上。两棵树都将加载来自 Javascript 对象的不同数据。第一个将出现在: 第二
我使用从 TreeMap 派生的类和我自己的比较器作为 LinkedHashMap 中的键。使用这个构造,我发现了一些我无法解释自己的奇怪行为。也许你们中的一个人可以提供帮助。我尝试用原语重现我的问题
如何在使用 d3.js 单击时从 treemap 获取矩形的值?HTML正文如下, "ABC" "My rectangle tag here"
我有一个树形图,我试图在这里进行调整,但问题是,当我单击折叠的节点时,它会自动伸展树(Splay Tree)中的所有根节点,而不是仅展开直接子节点。这是一把 fiddle 。我该如何解决这个问题? h
尝试转换 Mike Bostock 的 zoomable treemap到 React 组件中。已经完成了一部分,但不确定当数据取决于渲染的 DOM(即宽度)时在组件之间传递数据的最佳方式。 遇到了本
我正在尝试使用 Javascript 对象创建一个小树形图。我正在使用 D3 并尝试说明元素(键、id)的嵌套结构而不是它们的值。 我的JSFiddle var d1 = { "time_
我想使用 Highcharts 创建一个有 4 个级别的树形图。构建 3 个级别的树形图效果很好。这是 fiddle :https://jsfiddle.net/khsemucx/2/和截图: var
My treemap body { font: 10px sans-serif; position: relative; } .node { box-sizing: borde
当我收到新数据时更新并重新渲染的 js 树形图。我建立了一个包含 50 个元素的数据集,效果很好。但是,我尝试在更大的数据集(包含 10,000 个元素)上运行相同的代码。而且它似乎无法渲染图形,有人
这是 JavaScript 代码: d3.json("city.json", function (error, root) { var nodes = cluster.nodes(ro
我是一名优秀的程序员,十分优秀!