Javascript 只需添加一个类即可实现SVG动画
我使用SMIL动画创建了一个svg加载程序动画。我只是通过添加一个类名来显示元素中的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只添加一个类,而不做其
loader
(单击容器以查看加载器)
但是现在,我意识到了。所以,我决定使用CSS处理动画。但是如果我使用css处理动画,那么我将无法像上面那样管理代码,即仅仅通过添加一个类
如果我使用css动画,我需要在容器中添加一个新元素,然后使用内联svg概念IMO
不管怎样,我可以在使用css动画时通过添加一个类来管理动画吗
有几点:
- 我不想添加任何新元素
- 我将使用JavaScript只添加一个类,而不做其他任何事情
- 我不想生成gif(光栅图像)
我只限于添加一个类来管理动画,因为它可以使我的代码井然有序,而且我觉得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>