javascript - 防止 d3 画笔触发点击事件

标签 javascript d3.js dom-events

即使画笔不为空,D3 画笔也会在“brushend”上触发奇怪的点击事件。我尝试了 d3.event.stopPropagation()d3.event.preventDefault() 但它没有工作。有什么想法吗?

这是一个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

可以将图形元素和其他容器元素作为子元素的元素。

  • 一个,
  • 定义,
  • 字形,
  • g,
  • 标记,
  • 面具,
  • 缺少字形,
  • 图案,
  • svg,
  • 切换,
  • 符号

g 元素没有 Canvas ,它是容器。

<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/

关于javascript - 防止 d3 画笔触发点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28470732/

相关文章:

javascript - 如何在 JavaScript(或 jQuery)中实现自定义广播事件?

JavaScript 函数无法处理事件

javascript - 通过 JavaScript 类处理时,序列化时表单字段为空

javascript - 使用 Browserify 时如何公开 Google map 的回调函数?

javascript - 当鼠标靠近 D3 中的一条线时显示工具提示

javascript - 非常简单的 d3.js 折线图未在浏览器中显示

javascript - 动态启动/停止 d3.force

javascript - dropBefore 事件未按预期工作

javascript - 当 alpha 小于 1 时,HTML Canvas 不准确地设置像素颜色

javascript - 我的服务定义 Angular 正确吗?