javascript - 如何定位一个在一个
问题描述
我有一个 SVG 地图,其中包含保存数据的各种路径。我想做的是在路径悬停时拿起州名。
我将一个事件侦听器附加到 svg 元素,并正在寻找 event.target 以从事件中获取特定路径。我构建了在方法对象中记录当前 event.target 的 handleStateHover:
<svg style="stroke-linejoin: round; stroke:#000; fill: none;"
width="100%"
height="600"
viewBox="0 0 1000 600"
version="1.1"
id="svg"
@click="handleStateClick"
@mouseover="handleStateHover">
handleStateHover (e) {
console.log(e.target)
}
问题是,似乎 e.target 记录的是 svg 元素而不是路径元素。有时它确实按预期显示了路径元素,但随后又迅速更改为 svg 元素。
您可以通过打开控制台并查看 JS 日志来查看。
有谁如何始终如一地在悬停事件上获取路径元素?e.target 不应该总是显示悬停在父元素中的特定子元素吗?我究竟做错了什么?谢谢
解决方案
这不完全是 vue 问题,而只是 vanilla js。
然而,有两件事需要:
- 过滤为只使用
path
s,然后从路径中获取名称dataset
handleStateHover (e) {
if (e.target.tagName === 'path') {
console.log(e.target.dataset.name);
}
}
- 将
pointer-events: fill;
样式添加到 svg
默认情况下,鼠标指针使用盒子模型,因此您的事件不会正确区分状态
这是一个工作示例:https ://codepen.io/anon/pen/JeGELr
推荐阅读
- python - Python 通过需要将字符串拆分为列表并分隔元素来计算字符串的长度
- c# - 启动 Windows 服务是否总是在启动应用程序之前运行?
- css - 在反应中添加不可见元素
- excel - 等待查询完成后再继续
- jquery - jQuery 检测滚动停止的时间。
- c - UEFI 按键处理程序
- python - 获取最小连续值计数(如果有)
- java - 限制和无序流的内部更改
- c# - 在 Visual Studio 2015 中从 C# 运行 python 文件时:指定的可执行文件对此 OS 平台无效
- java - ClassPath.getTopLevelClasses() 是否应该返回 `java.*` 包?