【发布时间】:2016-05-24 01:48:54
【问题描述】:
我在 SVG 中创建了一个简单的路径,并使用 mark-end 属性来创建箭头线。然后我将点击事件绑定到路径。
我发现单击标记区域时未触发单击事件。如何解决这个问题?
【问题讨论】:
-
你确实需要展示一些代码。
-
在 SVG 中只是一个带有 Mark-end 的路径。
标签: dom svg dom-events
我在 SVG 中创建了一个简单的路径,并使用 mark-end 属性来创建箭头线。然后我将点击事件绑定到路径。
我发现单击标记区域时未触发单击事件。如何解决这个问题?
【问题讨论】:
标签: dom svg dom-events
根据规范,这应该被认为是给定的。
11.6.4 Details on how markers are rendered
[...]
标记的呈现效果就好像被引用的“标记”元素的内容被深度克隆到一个独立的非公开DOM树中,用于标记的每个实例。因为克隆的 DOM 树是未公开的,所以 SVG DOM 不会显示标记的克隆实例。
当指针事件发生时,将通过遍历 SVG 的 DOM 树来执行命中测试,从而排除任何未暴露的影子 DOM 树。这就是为什么标记实例不可能成为指针事件的目标。
为了澄清,值得注意的是,通过 CSS 规则对标记实例进行样式设置也是如此,这是不可行的。只有原始标记元素,即声明 <marker> 元素,可以使用 CSS 设置样式,而通过属性 marker-start、marker-mid 或 marker-end 引用的克隆实例无法访问,因此无法单独设置样式。
CSS2 选择器可以应用于原始(即引用的)元素,因为它们是正式文档结构的一部分。 CSS2 选择器不能应用于(概念上)克隆的 DOM 树,因为它的内容不是正式文档结构的一部分。
【讨论】: