javascript - 鼠标悬停时堆栈图中的淡入淡出栏

标签 javascript css d3.js

我正在使用 d3 比较堆栈布局中的 2 个数据集。一切看起来都很棒,除了当我将鼠标悬停在特定列上时,我希望所有 other 列都淡化为 .2 不透明度。此时我可以让所有列淡出,但是我无法保持鼠标悬停在实体上的特定列。这是更改鼠标悬停和鼠标移出栏的代码:

var rects = groups.selectAll("rect")

 // Rect initialization code here....    

.on("mouseover", function(d) {
    // make all bars opaque
    fade(.2);
    })
.on("mouseout", function() {
    fade(1);
    });

这里是淡入淡出函数:

function fade(opacity) {
    d3.selectAll("rect")
    .transition()
    .style("opacity", opacity);
};

所以基本上我需要一个过滤功能来选择除我的鼠标突出显示的矩形之外的所有内容。 D3 确实有一个,但我对如何根据我的情况实现这一点感到困惑。有帮助吗?

更新

我稍微更新了 Lars Kotthoff 的回答,并让它发挥作用。由于这是一个堆栈图,我还想选择同一行中的两个条形图。这是我为任何 future 用户编写的代码:

function fade(opacity, selectedBar) {
    d3.selectAll("rect")
        .filter(function(d, i) { return selectedBar !== d && selectedBar.x !== d.x; })
        .transition()
        .style("opacity", opacity);
};

然后在主要部分中,我将不透明度级别和选定元素传递给淡入淡出函数:

.on("mouseover", function(d) {
        fade(.4, d);
};

最佳答案

可以传入当前节点绑定(bind)的数据进行过滤:

.on("mouseover", function(d) {
  // make all bars opaque
  fade(.2, d);
})
.on("mouseout", function(d) {
  fade(1, d);
});

function fade(opacity, d) {
  d3.selectAll("rect")
    .filter(function(e) { return e !== d; })
    .transition()
    .style("opacity", opacity);
}

关于javascript - 鼠标悬停时堆栈图中的淡入淡出栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26044845/

相关文章:

css - 如何在具有 40px 填充的父 div 中将 div 设置为 100% 宽度

javascript - D3.js 表附加相同的数据值

css - IE7 CSS float 问题

javascript - 解析firebase对象javascript

javascript - 使用井号标签从下拉列表中预先选择一个项目

c# - 访问asp :lable value which set using jquery?

jquery - 如何在打开提交按钮模式之前验证输入

csv - 将 d3 生成的 HTML 表导出为 CSV(也必须在 IE 上工作)

javascript - 在 d3 时间轴上显示每隔一个刻度标签?

javascript - AngularJS 模块和子模块实例化