我已经添加了复选框选项的下拉列表,当选中一个选项时,它会在div #chartContainer
中呈现D3图形,并在容器上方为该图表添加新的按钮选项卡。如何隐藏现有的D3图表并呈现新图形?
但是,如果我在下拉菜单中选择选项二,则会添加第二个选项卡按钮,但第二个图形将呈现在第一个图形下方。
我的目的是隐藏当前渲染的svg,并在选择新图形选项时显示下一个图形。
如何隐藏现有的D3图表并呈现新图形?
chartContainer和图表选项复选框:
<ul class="dropdown-menu" id="chartDropdown" role="menu">
<li><a href="#" class="small" data-value="option1" tabindex="-1"><input type="checkbox" /> Chart 1</a></li>
<li><a href="#" class="small" data-value="option2" tabindex="-1"><input type="checkbox" /> Chart 2</a></li>
</ul>
<div class="row top-buffer" id="tabContainer">
<ul class="nav nav-pills" id="chartTabs">
<li><a data-toggle="tab" href="#fragment-1">Chart</a></li>
</ul>
@* render chart in this container *@
<div id="chartContainer">
</div>
</div>
切换图表能见度通过ID方法:
脚本的function toggle_chart_visibility(id) {
var e = document.getElementById(id);
if(e.style.display == 'block')
e.style.display = 'none';
else
e.style.display = 'block';
}
片段创建标签,并在ChartContainer绘制图形:
/* dataSet object requriement: data, categories, filter lists*/
function visualize(rawDataSet) {
//0. process data
let dataSet = process(rawDataSet, 'month');
let mode = 'month';
// let dataSet = process(rawDataSet, 'day');
//1. draw legend and all radio button fitlers
//2. draw main chart
let newStackChart = stackChart().data(dataSet).tickFormat("%b/%y");
//Dynamically create a new tab for the rendered graph
var ul = tabs.find("ul");
$('<li><a href="#fragment-' + ++tabCounter + '">Chart</a></li>').appendTo(ul);
tabs.tabs("refresh");
tabs.tabs('select', tabCounter - 1);
//toggle the previous chart to hide
//to make room for the next chart render
//not sure how to get the id of the current svg rendered
toggle_chart_visibility(svg);
d3.select('div#chartContainer')
.append("div")
.classed("svg-container", true) //container class to make it responsive
.append("svg")
//responsive SVG needs these 2 attributes and no width and height attr
.attr("preserveAspectRatio", "xMinYMin meet")
.attr("viewBox", "0 0 2000 2000")
//class to make it responsive
.classed("svg-content-responsive", true)
.call(newStackChart);
}
我还没有测试,但会这样做删除我的第一个或以前的渲染图?我打算创建一个新的容器和按钮,以便我可以在图形之间选择。目前,它将在原始图下面添加图。 –
你只想绘制两个图形,然后隐藏/显示所选的一个? –
是的,如果我选择列表中的选项一,绘制一个图形和标签按钮。如果我选择选项二,则将第二个图形绘制在叠加在第一个图形容器顶部的新容器中。点击tab1会回到第一个渲染的图形,点击tab2将会跳到第二个图形。全部在屏幕上的相同区域内。 –