【发布时间】:2021-03-13 17:45:11
【问题描述】:
我希望一些 SVG 在点击时生成动画。 SVG 被定义一次,并通过<use> 标签多次重复使用。
我写了以下代码:
svg {
border: 1px solid #0af;
stroke: black;
}
<svg display="none">
<symbol id="tick" viewBox="0 0 100 100">
<polyline points="15,50 40,75 85,25" style="stroke-width:10; fill:none; stroke-linecap:round; stroke-linejoin:round;" stroke-dasharray="120">
<animate attributeName="stroke-dashoffset" from="120" to="0" dur="0.5s" fill="freeze" repeatCount="1" begin="click" />
</polyline>
</symbol>
</svg>
<svg><use href="#tick"/></svg>
<svg><use href="#tick"/></svg>
<svg><use href="#tick"/></svg>
<svg><use href="#tick"/></svg>
问题是,如果我单击一个 SVG,该 SVG 的所有实例都会被动画化,这不是我想要的。我希望他们独立制作动画。除了多次嵌入完整的 SVG 之外,最好的方法是什么?
【问题讨论】:
-
多次嵌入完整的 SVG 有什么问题,尤其是考虑到这样做的方法?
-
在 Firefox 中运行良好,可能是一些 Chrome 错误。如果您不想复制 svg,可以尝试使用一些 svg 动画库。
-
你是对的@Winns。我在所有主流浏览器中都试过这个,其中只有 Firefox 独立播放动画。在我看来,Firefox 的实现方式与标准不同。
-
@winns 不,Firefox 坏了。
-
SVG2 UseEventHandling:在引用图形中的元素上定义的任何事件侦听器还必须在相同的捕获阶段,在使用元素阴影树中该元素的每个实例上侦听相同的事件. .....用户代理必须确保每个元素实例的事件监听器列表同步以匹配其对应的元素。
标签: javascript html css svg