【发布时间】:2018-08-11 01:01:17
【问题描述】:
我有一个复杂的问题。我正在尝试通过 svg 呈现网格,然后将事件侦听器添加到网格中。目前我正在通过<pattern> 元素渲染网格。我对渲染网格的其他途径持开放态度,但它需要可扩展/高性能,因为这个网格很容易成为数千个正方形的 10 个。将其视为平面图或蓝图。
我想要什么:我希望能够将一个事件监听器附加到网格的每个方格。
我做了什么:我查阅了 svg 文档,尝试了很多不同的东西(如 onclick 处理程序、svg 属性,如指针事件......等),但没有运气。我可能可以让它与鼠标客户端坐标一起工作,但是我想尽可能避免使用这种方法,因为这个 svg 将具有缩放和平移功能.. 这会使坐标变换变得很痛苦。
基本 svg 代码(针对这个问题进行了简化):
<svg viewBox="0 0 100 100">
<g className="view-control">
<defs>
<pattern id="grid" width="10" height="10" patternUnits="userSpaceOnUse">
<path d="M 10 0 L 0 0 0 10" fill="none" stroke="gray" strokeWidth="0.5"/>
</pattern>
</defs>
<rect width="100%" height="100%" fill="url(#grid)" />
</g>
</svg>
【问题讨论】:
-
如果您为每个较小的正方形使用一个
rect元素,那么您只需将一个鼠标悬停在侦听器上,即可通过event.target找出悬停在哪个组元素上。但我不确定你是否喜欢这样,因为你说你可能需要数千个正方形。
标签: javascript reactjs svg