【问题标题】:Click event does not work on the mark-end of path in SVGClick 事件在 SVG 中路径的标记结束时不起作用
【发布时间】:2016-05-24 01:48:54
【问题描述】:

我在 SVG 中创建了一个简单的路径,并使用 mark-end 属性来创建箭头线。然后我将点击事件绑定到路径。

我发现单击标记区域时未触发单击事件。如何解决这个问题?

【问题讨论】:

  • 你确实需要展示一些代码。
  • 在 SVG 中只是一个带有 Mark-end 的路径。

标签: dom svg dom-events


【解决方案1】:

根据规范,这应该被认为是给定的。

11.6.4 Details on how markers are rendered

[...]

标记的呈现效果就好像被引用的“标记”元素的内容被深度克隆到一个独立的非公开DOM树中,用于标记的每个实例。因为克隆的 DOM 树是未公开的,所以 SVG DOM 不会显示标记的克隆实例。

当指针事件发生时,将通过遍历 SVG 的 DOM 树来执行命中测试,从而排除任何未暴露的影子 DOM 树。这就是为什么标记实例不可能成为指针事件的目标。

为了澄清,值得注意的是,通过 CSS 规则对标记实例进行样式设置也是如此,这是不可行的。只有原始标记元素,即声明 <marker> 元素,可以使用 CSS 设置样式,而通过属性 marker-startmarker-midmarker-end 引用的克隆实例无法访问,因此无法单独设置样式。

CSS2 选择器可以应用于原始(即引用的)元素,因为它们是正式文档结构的一部分。 CSS2 选择器不能应用于(概念上)克隆的 DOM 树,因为它的内容不是正式文档结构的一部分。

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 2019-06-28
    • 2012-09-21
    • 2015-04-18
    • 2013-05-10
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    相关资源
    最近更新 更多