简体   繁体   English

防止D3笔刷触发点击事件

[英]Prevent d3 brush from firing a click event

D3 brush fires a strange click event on " brushend " even when the brush is not empty. 即使画笔不是空的,D3画笔也会在“ brushend ”上触发一个奇怪的单击事件。 I tried d3.event.stopPropagation() and d3.event.preventDefault() but it doesn't work. 我尝试了d3.event.stopPropagation()d3.event.preventDefault(),但是它不起作用。 Any ideas? 有任何想法吗?

Here is a JSfiddle for demonstration . 这是一个用于演示的JSfiddle

svg.append("rect")
  .attr("width", 200)
    .attr("height", 200)
  .style("stroke", "black")
  .style("fill", "none");


var brush_elem = d3.svg.brush()
  .x(d3.scale.linear().range([0, 200]))         
  .on("brushend", function(){ d3.event.sourceEvent.stopPropagation(); });

svg.append("g").call(brush_elem)
  .selectAll("rect")
    .attr("height", 200);

container element 容器元素

An element which can have graphics elements and other container elements as child elements. 可以将图形元素和其他容器元素作为子元素的元素。

  • a, 一种,
  • defs, defs
  • glyph, 字形
  • g ,
  • marker, 标记,
  • mask, 面具,
  • missing-glyph, 缺少字形,
  • pattern, 图案,
  • svg, svg,
  • switch, 开关,
  • symbol 符号

g Element doesn't have canvas, it is container. g Element没有画布,它是容器。

<style>
  g {
    fill: white;
    pointer-events: "all";
  }

  circle {
    fill: gray;
  }

</style>
<svg width="960" height="500" style="border:1px solid red;">
<g>
  <circle cx="20" cy="20" r="100" stroke="red"/>
  <circle cx="220" cy="220" r="100" stroke="red" />
</g>
</svg>

<script src="https://d3js.org/d3.v5.js"></script>
<script>
d3.select("svg")
  .on("click", function() {
    alert('svg clicked')
  })

d3.select("g")
  .on("click", function() {
    alert('g clicked');
    event.stopPropagation()
  })
 </script>

https://jsfiddle.net/jsfiddleCem/98ut4jac/ https://jsfiddle.net/jsfiddleCem/98ut4jac/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM