动态替换另一个SVG AnimateMotion

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态替换另一个SVG AnimateMotion相关的知识,希望对你有一定的参考价值。

我正在开发一个React应用程序,它会在一段时间内显示地铁交通。它显示了在地铁地图上移动的小火车,每列火车都有自己的animateMotion,因为它们具有不同的速度和起飞时间。

我需要做的是,当用户要求不同的时间段时,停止所有的animateMotion,用新的替换它们。

问题:如果我删除它们,我会遇到DOM问题:Uncaught DOMException: Failed to execute 'insertBefore' on 'Node'

如果我相信React更换数据并更新组件,之前的动画要么不停止(它们仍然污染图形),要么不再启动。

这是一个说明前一种情况的代码图(感谢Radu Luncasu):https://stackblitz.com/edit/multiple-trains

使用SMIL,React还是CSS 3可以做到这一点吗?或者我需要看看第三方图书馆?

答案

更新:看起来问题是由动画未在反应渲染上重新启动引起的。我已经修改了codepen所以它现在调用了

document.getElementById("ani-circle").beginElement();

在设置新状态之前。我承认,这是一种愚蠢的做法,但却无法想到其他任何事情。我想你可以使用ref而不是getElementById来减少hacky。

看看这个codepen,我试着做你所描述的基础知识并做出反应似乎做得很好。也许你会在那里找到一些可以帮助你的东西,或者你可以复制这个问题,这样有人可以提供帮助。

https://stackblitz.com/edit/react-cbaxbq

以上是关于动态替换另一个SVG AnimateMotion的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular JS 中用另一个 svg 图标动态替换 svg 图标?

与使用animateMotion命令时一样,避免将对象移动

.NET - 此脚本的每个单独部分都可以工作,但是作为一个整体运行它会导致它替换我的SVG文件中的所有文本

将图像放在另一个 png/svg 文件中

动态更改外部 SVG 文件的 CSS 文件?

通过在 SAS 中用另一个前缀替换前缀来动态重命名变量