Javascript 一次触发多个按钮和行D3.js
我有一组按钮,它们都具有相同的类,并由D3js附加到图表区域。在4个类别中有20个按钮:可见、JS、CSS、文本区域。我想做的是:按下类别中的任何一个按钮来切换类别中的所有按钮,如图所示。整个类别的行(5行)也应切换 图表的代码可在代码笔中找到: 对于我的按钮:Javascript 一次触发多个按钮和行D3.js,javascript,css,d3.js,Javascript,Css,D3.js,我有一组按钮,它们都具有相同的类,并由D3js附加到图表区域。在4个类别中有20个按钮:可见、JS、CSS、文本区域。我想做的是:按下类别中的任何一个按钮来切换类别中的所有按钮,如图所示。整个类别的行(5行)也应切换 图表的代码可在代码笔中找到: 对于我的按钮: issue.append("rect") .attr("width", 10) .attr("height", 10) .a
issue.append("rect")
.attr("width", 10)
.attr("height", 10)
.attr("x", width + (margin.right/3) - 15)
.attr("y", function (d, i) { return (legendSpace)+i*(legendSpace) - 8; }) // spacing
.attr("fill",function(d) {
return d.visible ? color(d.name) : "#F1F1F2"; // If array key "visible" = true then color rect, if not then make it grey
})
.attr("class", "legend-box")
.on("click", function(d){ // On click make d.visible
d.visible = !d.visible; // If array key for this data selection is "visible" = true then make it false, if false then make it true
maxY = findMaxY(categories); // Find max Y rating value categories data with "visible"; true
yScale.domain([0,maxY]); // Redefine yAxis domain based on highest y value of categories data with "visible"; true
svg.select(".y.axis")
.transition()
.call(yAxis);
issue.select("path")
.transition()
.attr("d", function(d){
return d.visible ? line(d.values) : null; // If d.visible is true then draw line for this d selection
})
在单击功能的内部,在所有行上设置可见标志:
.on("click", function(d){ // On click make d.visible
// visible is true if the start of the name matches
categories.forEach(function(e){
e.visible = e.name.slice(0, 5) == d.name.slice(0, 5)
})
要一次打开多个分区,请仅翻转匹配类别的可见标志:
.on("click", function(d){
categories.forEach(function(e){
e.visible = e.name.slice(0, 5) == d.name.slice(0, 5) ? !e.visible : e.visible
})
在单击功能的内部,在所有行上设置可见标志:
.on("click", function(d){ // On click make d.visible
// visible is true if the start of the name matches
categories.forEach(function(e){
e.visible = e.name.slice(0, 5) == d.name.slice(0, 5)
})
要一次打开多个分区,请仅翻转匹配类别的可见标志:
.on("click", function(d){
categories.forEach(function(e){
e.visible = e.name.slice(0, 5) == d.name.slice(0, 5) ? !e.visible : e.visible
})
你想要的只是视觉效果,对吗?不,对不起,不清楚。我还需要在图表上切换行。嗯,仅仅一个问题就需要编写大量代码,特别是在没有工作代码的情况下。对不起,我出去了。@GerardoFurtado我添加了代码。谢谢。你介意建议一个替代方案吗?你只想要视觉效果,对吗?不,对不起,不清楚。我还需要在图表上切换行。嗯,仅仅一个问题就需要编写大量代码,特别是在没有工作代码的情况下。对不起,我出去了。@GerardoFurtado我添加了代码。谢谢。你介意提出一个替代方案吗?谢谢,这确实解决了这个问题。问题:我如何同时打开两个部分?谢谢,这确实解决了这个问题。问题:如何同时打开两个部分?