如果我有keydown,如何停止调用d3.brush? D3 / JS

时间:2014-12-15 14:56:09

标签: javascript d3.js

这是我的刷子电话

brush.call(d3.svg.brush() //-calling the brush
        .x(d3.scale.identity().domain([0, width]))
        .y(d3.scale.identity().domain([0, height]))
        .on("brushstart", function(d) {
        d3.selectAll(".selectedNode text")
        .attr("class", "hidden")
        ;
          nodes.each(function(d) { d.previouslySelected = shiftKey && d.selected; });
        })
        .on("brush", function() {

         //console.log(d3.event.sourceEvent.ctrlKey + "ctrl key");

          nodes.classed("selectedNode", function(d) {
            return d.selected = d.previouslySelected ^
                (extent[0][0] <= d.x && d.x < extent[1][0]
                && extent[0][1] <= d.y && d.y < extent[1][1]);
          });
        })
        .on("brushend", function() {
          d3.event.target.clear();
          d3.select(this).call(d3.event.target);
        }));

如果我按下ctrl键,如何停止调用此操作?所以我可以调用缩放功能,如果ctrl键关闭,它将画笔和缩放功能分开

1 个答案:

答案 0 :(得分:2)

管理以解决这个问题,只需将brushstart包装在以下条件中:

if(!d3.event.sourceEvent.ctrlKey) //-if the ctrl key is not pressed
        { 

}

这基本上说如果ctrlKey没有继续运行:)

所以不要这样:

.on("brush", function() {

         //console.log(d3.event.sourceEvent.ctrlKey + "ctrl key");

          nodes.classed("selectedNode", function(d) {
            return d.selected = d.previouslySelected ^
                (extent[0][0] <= d.x && d.x < extent[1][0]
                && extent[0][1] <= d.y && d.y < extent[1][1]);
          });
        })

你会有这个:

.on("brush", function() {

         //console.log(d3.event.sourceEvent.ctrlKey + "ctrl key");
if(!d3.event.sourceEvent.ctrlKey) //-if the ctrl key is not pressed
            { 
          nodes.classed("selectedNode", function(d) {
            return d.selected = d.previouslySelected ^
                (extent[0][0] <= d.x && d.x < extent[1][0]
                && extent[0][1] <= d.y && d.y < extent[1][1]);
          });
}
        })