样式化组件中的 SVG 动画

Posted

技术标签:

【中文标题】样式化组件中的 SVG 动画【英文标题】:SVG animation in styled components 【发布时间】:2021-09-02 10:03:51 【问题描述】:

我有不同的svgs

<svg class="logo">
 <path .../>
 <path .../>
 ...
</svg>

我想为各个路径设置动画。在香草 JS 中,我会做类似的事情

const logo = document.querySelectorAll('.logo path');

for (let i = 0; i < logo.length; i++) 
  console.log(`$i: $logo[i].getTotalLength()`);

手动查找各个路径的长度,然后像这样逐个路径在css路径中制作动画

...
.logo path:nth-child(2) 
  stroke-dasharray: ...;
  stroke-dashoffset: ...;
  animation: anim 2s ease-in-out forwards;

.logo path:nth-child(3) 
  stroke-dasharray: ...;
  stroke-dashoffset: ...;
  animation: anim 2s ease-in-out forwards 0.2s;

...
@keyframes anim 
  to 
    stroke-dashoffset: 0;
  

我在我的React项目中使用了styled components,我想让上面的逻辑符合整个项目的风格,也就是使用styled components。实现这一目标的最有效方法是什么?

【问题讨论】:

【参考方案1】:

您可以考虑使用网络动画 api (https://developer.mozilla.org/en-US/docs/Web/API/Web_Animations_API)。 所以动画可以通过 JS 设置,所以你可以使用你提供的 JS 代码来计算长度并将它们存储在变量中。然后,您可以在网络动画 api 中使用这些变量,这样您就不必手动计算和输入。

【讨论】:

以上是关于样式化组件中的 SVG 动画的主要内容,如果未能解决你的问题,请参考以下文章

动画 SVG 组对象 - 使用样式组件进行变换旋转不会围绕圆原点旋转

尝试将 :focus 样式应用于样式化组件内的嵌套 SVG

样式化组件 + 故事书:当我传递新样式时,SVG 图标不会重新渲染

如何使用样式化组件在 reactjs 中设置 svg 样式

使用 SVG 导入对样式化组件进行单元测试

为 React 搜索栏使用带有嵌套样式的样式化组件,尝试将两个不同的 SVG 放置在搜索栏的相对两侧