【发布时间】:2020-06-08 19:36:07
【问题描述】:
这里是菜鸟问题。
我想知道如果它们覆盖了鼠标坐标,是否可以触发它下面的元素(路径、圆、...)的“单击”事件? 最好在 typescript 中使用 d3.js 库。
例如,考虑有两个圆圈(在 z 位置上一个小大于一个),并且在单击时都显示一条消息。 我希望如果我在小圆圈内单击,它的消息会出现,然后大圆圈的消息也会出现。
这是我的示例的 HTML 代码[编辑:D3 的更改版本]:
<!DOCTYPE html>
<style>
circle { fill: lightgreen; stroke: #000; }
</style>
<body>
<script src="https://d3js.org/d3.v5.min.js"></script>
这里是相关的javascript:
var svg = d3.select("body").append("svg")
.style("float", "left")
.attr("width", 480)
.attr("height", 480)
.attr('pointer-events', 'all')
.on("click", log("SVG"));
svg.append("circle")
.attr('pointer-events', 'all')
.attr("cx", 240)
.attr("cy", 240)
.attr("r", 200)
.on("click", log("OUTER"));
svg.append("circle")
.attr('pointer-event', 'all')
.attr("cx", 240)
.attr("cy", 240)
.attr("r", 100)
.on("click", log("INNER"));
var div = d3.select("body").append("div")
.style("float", "left");
function log(message) {
return function() {
div.append("p")
.text(message)
.style("background", "#ff0")
.transition()
.duration(2500)
.style("opacity", 1e-6)
.remove();
};
}
使用此代码单击大圆圈会显示 OUTER 和 SVG 消息。点击小圆圈会显示 INNER 和 SVG 消息,但我想要序列 INNER, OUTER > 和 SVG。
[编辑:纠正误用“传播”一词]
我将元素的“指针事件”属性设置为“全部”。 我知道这使它们“非传递”,但我希望能够触发它们的事件并且还触发它们下元素的事件。
或者,是否有任何好的方法来获取覆盖给定坐标 [X,Y] 的 svg 元素列表(可以通过 d3.mouse 获得),以便可以手动触发它们各自的点击事件?
感谢您的帮助。
【问题讨论】:
-
如果您可以在此处发布代码示例,以帮助其他人解码您要完成的工作
-
@tlaminator 你是对的!我用一个例子编辑了我的帖子。
-
已编辑帖子:在他的回答中遵循了@Gerardo Furtado 的建议。
标签: javascript typescript d3.js