Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 只需添加一个类即可实现SVG动画_Javascript_Html_Css_Svg_Css Animations - Fatal编程技术网

Javascript 只需添加一个类即可实现SVG动画

Javascript 只需添加一个类即可实现SVG动画,javascript,html,css,svg,css-animations,Javascript,Html,Css,Svg,Css Animations,我使用SMIL动画创建了一个svg加载程序动画。我只是通过添加一个类名来显示元素中的svg,即loader (单击容器以查看加载器) 但是现在,我意识到了。所以,我决定使用CSS处理动画。但是如果我使用css处理动画,那么我将无法像上面那样管理代码,即仅仅通过添加一个类 如果我使用css动画,我需要在容器中添加一个新元素,然后使用内联svg概念IMO 不管怎样,我可以在使用css动画时通过添加一个类来管理动画吗 有几点: 我不想添加任何新元素 我将使用JavaScript只添加一个类,而不做其

我使用SMIL动画创建了一个svg加载程序动画。我只是通过添加一个类名来显示元素中的svg,即
loader

(单击容器以查看加载器)

但是现在,我意识到了。所以,我决定使用CSS处理动画。但是如果我使用css处理动画,那么我将无法像上面那样管理代码,即仅仅通过添加一个类

如果我使用css动画,我需要在容器中添加一个新元素,然后使用内联svg概念IMO

不管怎样,我可以在使用css动画时通过添加一个类来管理动画吗

有几点:

  • 我不想添加任何新元素
  • 我将使用JavaScript只添加一个类,而不做其他任何事情
  • 我不想生成gif(光栅图像)
我有SMIL和CSS动画的小提琴:


我只限于添加一个类来管理动画,因为它可以使我的代码井然有序,而且我觉得css动画也可以这样做。

您可以在loader.svg中设置css动画:

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" version="1.1">
  <style>
    rect{
      animation:fill 1s linear infinite;
    }

    @keyframes fill{
      0%{
        fill:#f05223;
      }
      100%{
        fill:white;
      }
    }

    rect:nth-child(2){
      animation-delay:.25s;
    }

    rect:nth-child(3){
      animation-delay:.50s;
    }

    rect:nth-child(4){
      animation-delay:.75s;
    }
  </style>
    <rect width="50" height="50" stroke="white" fill="white"></rect>
    <rect x="50" width="50" height="50" stroke="white" fill="white"></rect>
    <rect x="50" y="50" width="50" height="50" stroke="white" fill="white"></rect>
    <rect width="50" x="0" y="50" height="50" stroke="white" fill="white"></rect>
</svg>

直肠{
动画:填充1s线性无限;
}
@关键帧填充{
0%{
填充:#f05223;
}
100%{
填充物:白色;
}
}
矩形:第n个子对象(2){
动画延迟:.25s;
}
矩形:第n个孩子(3){
动画延迟:.50s;
}
矩形:第n个孩子(4){
动画延迟:.75s;
}

您可以继续使用SMIL,只需在页面中添加一个多边形填充即可。它很简单(只需将其添加到页面中),并且可以在所有浏览器上完美运行。我建议你从Fakesmile()开始。如果您需要更高级的硬件加速,请尝试Google polyfill()

阅读本文,了解更广泛的解释、多边形填充列表以及可用于设置SVG动画的库的回顾:

2016年,由于许多SMIL功能仍然没有替代方案,因此弃用通知很快就被取消了。即使在4年后写下这篇文章,也没有人反对。

我认为这是最接近的解决方案。非常感谢:)使svg变小了。我不建议使用SMIL动画,因为它们已被弃用,应该很快被删除。现在唯一“真实”的SVG动画制作方法是CSS动画(挂起@zessx,我在我的帖子中也是这么说的。哎呀,错过了!
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg" version="1.1">
  <style>
    rect{
      animation:fill 1s linear infinite;
    }

    @keyframes fill{
      0%{
        fill:#f05223;
      }
      100%{
        fill:white;
      }
    }

    rect:nth-child(2){
      animation-delay:.25s;
    }

    rect:nth-child(3){
      animation-delay:.50s;
    }

    rect:nth-child(4){
      animation-delay:.75s;
    }
  </style>
    <rect width="50" height="50" stroke="white" fill="white"></rect>
    <rect x="50" width="50" height="50" stroke="white" fill="white"></rect>
    <rect x="50" y="50" width="50" height="50" stroke="white" fill="white"></rect>
    <rect width="50" x="0" y="50" height="50" stroke="white" fill="white"></rect>
</svg>