- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 D3 强制布局并尝试折叠子节点,同时保持图形固定,例如只需更改它们及其链接的不透明度即可。然而,我并不是试图立即折叠所有节点 - 实际上我在每个节点中有一个名为“group”的属性,它可以是 1,2 或 3。
当我单击一个节点时,会出现一个工具提示,其中每个组都有 3 个按钮 - 单击正确的按钮后,我希望该类型的子节点折叠,但其所有子节点(所有 3 个子节点)组)也会崩溃。
这是fiddle 。
到目前为止,我已经尝试创建节点组 id 和相应链接 ID 的数组,然后使用 JQuery 隐藏这些 DOM 对象,但这不起作用:
function collapseNodes(node, collapseType, isCollapsed) {
var collapseData = minimise(node, collapseType);
var cNodes = collapseData.nodes,
cLinks = collapseData.links;
console.log(collapseData);
var newClass = isCollapsed ? "uncollapsed" : "collapsed";
cNodes.forEach(function(n) {
d3.select(n).style("opacity", 0);
});
cLinks.forEach(function(l) {
d3.select(l).style("opacity", 0);
});
}
function minimise(node, assetMinType = "") {
// Function to minimise a node
var minNodes = [];
var minLinks = [];
if (node.group == 'asset') {
node.children.forEach(function(child) {
if (child.group == assetMinType)
minimiseRec(child, node.id);
});
}
else {
minimiseRec(node, "");
// We want to keep the top node and link
minNodes.shift();
minLinks.shift();
}
function minimiseRec(node, parentID) {
minNodes.push("#" + node.id);
minLinks.push("#parent_" + parentID + "_child_" + node.address);
node.children.map(function(child) {
minimise(child, node.id);
});
}
return { nodes: minNodes, links: minLinks };
}
有人知道如何最好地做到这一点吗?
谢谢。
最佳答案
如果您只想更改不透明度,则相当简单。我想如果你隐藏一个节点的 child 你想隐藏他们的 child 的 child 等等?
首先我设置了一个变量d.hiddenNode
。这样我就可以切换不透明度。我把它设置为假。然后点击功能:
.on('click', function(d) {
console.log(d);
if(d.hiddenNode){
hideChildren(d, false);
d.hiddenNode = false;
} else {
hideChildren(d, true);
d.hiddenNode = true;
}
})
现在,因为您希望隐藏 child 的 child 等,所以您需要像这样的递归函数。隐藏链接和节点的一个(我已评论解释):
function hideChildren(node, hide) {
for (var i = 0; i < node.children.length; i++) {
recurseChildren(node.children[i]); //loop through children to hide
}
function recurseChildren(node) {
nodeEnter.each(function(d) { //go through all nodes to check for children
if (d.index == node.index) { //if child is found
d3.select(this).style('opacity', function(){
return hide ? 0 : 1; //toggle opacity depending on d.hiddenNode value
}) //.remove();
}
})
link.each(function(d) { //same with links
if (d.source.index == node.index || d.target.index == node.index ) { //if source or target are hidden hide the link
d3.select(this).style('opacity', function(){
return hide ? 0 : 1;
}) //.remove();
}
})
if (node.children) { //if this node has children, call again but with their children
for (var i = 0; i < node.children.length; i++) {
recurseChildren(node.children[i]);
}
}
}
}
这是更新的 fiddle :http://jsfiddle.net/thatOneGuy/3g4fqfa8/2/
编辑
对于弹出窗口,我刚刚创建了一个包含 3 个组的 div,1,2,3:
<div id='groupChoice'>
<div id='group1' class = 'group' onclick='hideGroup(1)'>1</div>
<div id='group2' class = 'group' onclick='hideGroup(2)'>2</div>
<div id='group3' class = 'group' onclick='hideGroup(3)'>3</div>
</div>
在 CSS 中将其设置为隐藏:
.group{
width: 50px;
height:50px;
border : 1px solid black;
}
#groupChoice{
visibility:hidden;
}
我稍微改变了逻辑,但这是更新后的注释:http://jsfiddle.net/thatOneGuy/3g4fqfa8/3/
需要对链接完成一些工作。我没有足够的时间来完成它,我很抱歉。但这应该可以帮助您开始。
基本上,当您单击一个节点时,会弹出窗口,您选择要隐藏的组,它们就会被隐藏。再次点击同一个节点,选择一个节点来显示。这完成得非常快,所以有很多错误,但基础知识是这样的,所以它应该有帮助:)
关于javascript - D3 强制布局 : Collapse Subset of Child Nodes (Opacity Change),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38998991/
我在玩 CSS3 滤镜功能(模糊、对比、反转等),并注意到有一个 opacity 功能: filter: opacity(0.5); -webkit-filter: opacity(0.5); -mo
给定这个 html CSS #my_div { width: 100px; height: 100px;
我们大多数人都知道简单的 opacity CSS 规则,但最近我偶然发现了 filter,它可以将 opacity(amount) 作为它的值- 除其他事项外。但这两者到底有什么区别呢? 最佳答案 f
这个问题在这里已经有了答案: How do I reduce the opacity of an element's background using CSS? (29 个答案) 关闭 9 年前。
我想知道为什么设置元素的 Brush.Opacity 值比设置元素的 Opacity 属性更能提高性能。 来自 MSDN:Modifying an element's Opacity property
.item { opacity: 0; transition: opacity 6s; } 我正在使用 JS 将不透明度设置为 0 到 1,反之亦然。 CSS 中是否有一种方法可以使不透明度从
我想开始使用目前正在开发的 CSS3 filter:opacity() 和 filter:drop-shadow() 属性,因为我读到它们在某些机器上的某些浏览器中是硬件加速的。但在这个早期阶段,我确
在QML中,如何防止子元素继承其父元素的不透明度? 我想为父元素和子元素设置不同的不透明度值。 最佳答案 实际上,为父元素设置layer.enabled: true对我有用。 将整个元素呈现到缓冲区,
我想要有阴影/发光的文本,但问题是文本本身是稍微透明的,阴影从它后面显示出来,给文本着色。 color: rgba(226,229,226,0.88); -webkit-text-stroke-wid
是否可以只调整文本阴影的不透明度,而不是调整文本本身的不透明度? 例如,我有带有蓝色阴影的紫色文本。我想让蓝色阴影具有不透明度,而不会在紫色上丢失任何东西。 h1.blue {text-shadow:
.imgopacity{ opacity:0.2px; } 在上面的CSS代码中,不支持opacity属性,如果我想拥有opacity属性,如何获取。 最佳答案 Opacity 属性不是以
我希望我的 HTML 背景不透明度为 .9,但由于某些原因它不起作用。为什么会这样我真的不明白... CSS html{ background: url(http://img.pixland.uz
我有一个问题。 我正在尝试用纯 CSS 重新创建这个 gif: http://i.imgur.com/VrV57jC.gif 所以,这是代码示例 http://jsfiddle.net/E4WMh/
我知道您可以在 Vim 中使背景色透明,但您也可以降低颜色的不透明度吗? 我试过这样做但没有成功: highlight Normal ctermbg=000000CC highlight NonTex
因为 WPF 没有允许显示多个月份的月历,所以我尝试在 WindowsFormsHost 中使用经典的 WindowsForms MonthCalendar。在“普通”WPF 窗口中执行此操作效果很好
我正在尝试对图层进行动画处理,以便不透明度在大约 0.2 秒内从 0 变为 1,将不透明度保持在 1 秒,然后将不透明度放回 0。我正在尝试使用关键时间去做,但我做不到。 CAKeyframeAnim
我使用 Javascript 和 Mootools 创建一个特定的 HTML 页面,其中包括一个 javascript 文件,用于检查元素的不透明度以进行特定操作。 但是,在 IE 上,我遇到了 el
我想设置 LinearLayout 背景的不透明度,我找到了这个 solution如果我使用普通布局,它工作正常,但在 android-widgets 的情况下,我们必须设置不同的布局我写了以下代码
我需要更改 DIV 的不透明度(如果有所不同,可能包含图像)。通常人们会使用 $('#id1').css('opacity', opacity1); $('#id2').css('opacity',
所以我想在我的网站上制作一个按钮,当悬停时将使页面内容的不透明度为 0。这是我的代码 #wrapper{ box-shadow:0 0 15px rgba(0,0,0,1); position:rel
我是一名优秀的程序员,十分优秀!