【发布时间】:2013-11-21 16:15:36
【问题描述】:
我想识别在特定 D3 元素上发生的按键事件。以下 sn-p(此处为JSFiddle)正确识别鼠标悬停在单个 div 上和全局按键事件,但似乎没有触发特定于 div 的按键处理程序(目前仅在 Chrome 上测试)。最简单的方法是什么:
- 确定光标在哪个
div/svg上,或者 - 将密钥处理程序附加到特定的
div/svg
?
_.each(_.range(2), function (i) {
var svg = d3.select("#plot" + i).append("svg")
.attr("width", 100)
.attr("height", 100);
svg.append("rect")
.attr("fill", "red")
.attr("x", 0)
.attr("y", 0)
.attr("width", 100)
.attr("height", 100)
.on("mouseover", function () { console.log("mouseover", i); })
.on("keydown", function () { console.log("div key", i); });
});
d3.select("body").on("keydown", function () { console.log("global key"); });
谢谢!
编辑
作为后续,我想我可以在 mouseover 处理程序中捕获 div ID 并使用它来识别全局 keydown 事件中的适当 div - 但我很好奇是否有更优雅或惯用的解决方案。
【问题讨论】:
-
您可以使用
elementFromPoint获取元素,d3.select并对其调用函数。 -
如果矩形上有文本标签,那可能会有点奇怪。 elementFromPoint 只抓取视图中最顶层的元素。
标签: javascript d3.js