如何在D3.js中单击一个圆圈时隐藏画笔?

时间:2015-10-20 18:19:14

标签: javascript d3.js svg

我有一个带有点击事件和画笔事件的散点图,它们都突出显示了点。如果我首先刷过一些圆圈然后点击一个圆圈,那么刷子仍然可见。

如何点击一个圆圈但之后仍可使用,刷子会消失?

Here is a JSFiddle.

<!DOCTYPE html>
<html>
<meta charset="utf-8">
<style>
#plot{
    border-style: solid;
    border-width: 4px;
    border-color: lightgray;
    display: inline-block;
    line-height: 0;
}

circle{
    fill: blue;
}

.highlight{
    fill: red;
}
</style>
<body>
<script src="d3.js"></script>
<div id="plot">
<script>

(function(){
    var data = [];
    for(i = 0; i < 100; i++){
        var x = Math.random();
        var y = Math.random();
        data.push({x: x, y: y});
    }

    var xScale = d3.scale.linear()
        .domain([0, 1])
        .range([0, 400]);

    var yScale = d3.scale.linear()
        .domain([0, 1])
        .range([400, 0]);

    var svg = d3.select("#plot").append("svg")
        .attr("width", 400)
        .attr("height", 400)

    var brush = d3.svg.brush()
        .x(xScale)
        .y(yScale)
        .on("brushstart", brushstart)
        .on("brushend", brushend);

    function brushstart(){
        d3.selectAll("circle")
          .classed("highlight", false);
    }

    function brushend(){
        var e = brush.extent();
        d3.selectAll("circle").filter(function(d){
            return xScale(d.x) >= xScale(e[0][0]) && 
                   yScale(d.y) <= yScale(e[0][1]) &&
                   xScale(d.x) <= xScale(e[1][0]) && 
                   yScale(d.y) >= yScale(e[1][1]);                                             
        })
        .classed("highlight", true);                       
    }

    svg.append("g")
      .classed("brush", true)
      .call(brush);

    svg.selectAll("circle")
        .data(data)
        .enter().append("circle")
        .attr("r", 6)
        .attr("cx", function(d){ return xScale(d.x) })
        .attr("cy", function(d){ return yScale(d.y) })
        .on("click", function(){
            d3.selectAll("circle").classed("highlight", false);
            d3.select(this).classed("highlight", true);
        });                                          
})();

</script>
</div>
</body>
</html> 

我可以使用d3.selectAll("brush").remove()d3.selectAll("brush").style("display", "none")使画笔消失,但之后不能使用画笔。

1 个答案:

答案 0 :(得分:3)

我认为隐藏画笔并且之后仍能使用它的正确方法是使用brush.clear() D3 SVG Controls

像这样 - d3.selectAll(".brush").call(brush.clear());

<强> Fiddle