【发布时间】:2019-05-10 19:24:58
【问题描述】:
我有一个网站菜单,它由多个多边形组成,用户可以单击它们。此外,多边形共享一些节点。到目前为止一切顺利(参见下面的代码)。
现在,我想以一种方式为这些多边形设置动画,使它们在一个缓慢而无限的循环中动态地改变它们的形状。为此,我需要单独为每个节点设置动画。我想过让节点沿着一条路径(例如一个小圆圈)移动,每个节点都以自己的速度移动。
有没有办法只使用 SVG/CSS 来做到这一点?还是我需要用js或snap寻找解决方案?由于菜单是网页的核心功能部分,因此我希望它尽可能简单和原味。
这是我从this thread 复制的两个多边形的工作示例。
polygon {
stroke-width: 1;
stroke: red;
fill: transparent;
}
polygon:hover {
fill: red;
}
<svg viewBox="0 0 999 799">
<polygon points="445,161 345,174 500,10" />
<polygon points="445,161 345,174 500,270" />
</svg>
下面的 sn-p 显示了迄今为止我能想到的移动单个节点的唯一方法。不幸的是,它需要所有其他点的坐标。由于节点在各种多边形之间共享,因此此解决方案不适用于我。
<polygon points="" fill="red">
<animate attributeName="points" dur="1s" fill="freeze"
from="0,0, 0,100, 100,100"
to="0,0, 0,100, 100,50"/>
</polygon>
非常感谢您的帮助!
【问题讨论】:
-
也许用路径创建整个事物,这样就不会重复,然后使用 SMIL 为路径的命令设置动画。
-
谢谢@RobertLongson。我担心,如果我使用路径,这些区域将无法点击。或者你知道如何做到这一点?
-
你必须自己弄清楚点击意味着什么,是的。
-
为每个多边形仔细构建 SMIL,使其与所有其他多边形的运动保持一致。
标签: animation svg polygon snap.svg