根据d3中的特定属性选择特征

时间:2018-10-26 21:19:40

标签: javascript jquery d3.js svg leaflet

我有一张地图:在传单地图上放置了d3个矢量(圆圈)。

    // read in data, draw circles in d3, and append to Leaflet map
    var feature = mapG.selectAll("circle")
        .data(SFData)
        .enter().append("circle")
        .style("stroke", "black")
        .style("fill", function(d) { return type(d.properties.Tenant)})
        .attr("r", function(d) { return radius(d.properties.Lease_Size)})
        .attr("class", 'features')

我有一个时间过滤器,如果我不希望某些特征在地图上可见,它会使某些特征不可见(代码未在此处显示)。我这样做的方法是将这些功能的不透明度设置为零。

问题是我希望弹出窗口仅在鼠标悬停时显示可见的地图特征。目前,将不透明度设置为零的功能仍然可以通过鼠标悬停来激活,这将事情搞砸了。因此,我只想选择当前将不透明度设置为.7的要素(时间滑块将动态更改不透明度)。

这似乎不起作用:

// select d3 features of the class 'features', that have attribute opacity = .7
d3.selectAll('.features[style = "opacity: .7;"]')       
        .on("mouseover", function(d) { 
         console.log(" do something here")
        })

我还尝试添加“分类”属性,然后基于该属性进行选择。虽然我可以使分类属性成功更新,但是鼠标悬停不会发生任何事情。

 //build function to change attribute 'classed'
function ClassMatch(data, value) {    

     if (year <= inputValue) {          
     return "Visible";
    } else {
        return "invisible";
    };
}

// pass in a function which assigns 'classed' attribute based on function
var feature = mapG.selectAll("circle")
        .data(SFData)
        .enter().append("circle")        
        .attr("classed", ClassMatch)

// select on classed attr
d3.selectAll('.Visible')

有什么想法吗?提前致谢!

0 个答案:

没有答案