由于我已私下联系以解释我是如何做到的,因此与我之前的回答略有扩展。
首先,有问题的应用程序的屏幕截图,其主要工作是汇总和显示从各种来源(PowerPoint 文件、公司数据库等)收集的计划数据。
相关位是带有彩色点的右侧垂直轴,其中每个点代表一个项目的努力和参与的组织。轴上的灰色区域是 d3.js 画笔,可以平移/调整大小以实时更改图表/表格数据。
// the axis is a regular ordinal axis, with a brush
y2 = d3.scale.ordinal(),
brush = d3.svg.brush().y(y2).on('brush', brushReact),
// [...]
// brush event handler
function brushReact() {
if (tasksSlice == null)
return;
var yrb = y2.rangeBand(),
extent = brush.extent(),
s0 = Math.round(extent[0]/yrb),
s1 = Math.round(extent[1]/yrb);
if (s0 == tasksSlice[0] && s1 == tasksSlice[1])
return;
tasksSlice = [s0, s1];
inner.refresh();
}
处理程序内部发生的事情非常简单:
- 获取画笔范围
- 将其转置为我的数据数组中的索引
- 切片我的数据数组并将结果设置为要显示的数据
- 刷新图表和表格
我希望这能解决问题。