路径的另一个有趣用途是创建动画路径。这种方法不仅适用于 SVG。我们在这里使用的是 CSS 属性 offset-path
,它同样适用于任何其他 HTML 元素。但如果检查一下该属性的值,就会发现我们定义路径的方式与 SVG 相同。
首先是轨道。我们将其定义为一条路径。
然后我们还有一个雪橇,它是由两条不同的路径组合而成的。
这两者本身都不是很有趣。新颖之处在于,我们可以添加一个动画,动画路径与轨道路径基本相同。动画路径只是略有不同,以便让雪橇更好地适应路径。默认情况下,雪橇的中下部会沿着路径移动,而头部和尾部会略微下沉到路径中。而不是改变路径,使雪橇在某些急转弯处略微上升。
<svg width="400" height="200" viewBox="-200 -100 400 200" fill="none">
<path
stroke="#E0CEB9"
stroke-width="4"
d="M-200 80 L -80 80 Q 80 80 70 -10 A 70 70 0 0 0 -70 -10 Q -80 80 80 80 L 200 80"
/>
<g class="sleigh">
<path
d="
M -30 -2 L 30 -2 A 10 10 0 0 0 30 -22
M -20 -2 L -20 -17
M 20 -2 L 20 -17"
stroke="#AF6455"
stroke-width="5"
/>
<path d="M -27 -17 L 27 -17" stroke="#7A504F" stroke-width="6" />
</g>
</svg>
.sleigh {
offset-path: path(
"M-200 80 L -90 80 Q 60 80 60 -10 A 50 50 0 0 0 -60 -10 Q -60 80 90 80 L 200 80"
);
animation: roller-coaster 6000ms infinite linear;
}
@keyframes roller-coaster {
0% {
offset-distance: 0%;
}
100% {
offset-distance: 100%;
}
}
分享: |