有没有办法使用Framer Motion沿路径(最好是SVG路径本身)对SVG元素进行动画处理?此外,有没有可能动画SVG元素轮流改变其旋转?下面是我想要实现的一个例子(不完全是,仅仅是一个例子):
https://tympanus.net/codrops/2019/12/03/motion-paths-past-present-and-future/
在Framer Motion文档中给出的示例中,我没有找到任何类似的声明性方式,但我想知道这是否可以通过MotionValues、onUpdate方法或命令式AnimationControls以某种方式实现?
发布于 2021-04-19 00:34:54
可以使用motion.path为pathLength属性设置动画效果。然后将其与路径后面的元素上的offsetDistance配对。
import React from "react"
import { motion } from "framer-motion"
import "./styles.css"
const transition = { duration: 4, yoyo: Infinity, ease: "easeInOut" }
export default function App() {
return (
<div className="container">
<svg xmlns="http://www.w3.org/2000/svg" width="451" height="437">
<motion.path
d="M 239 17 C 142 17 48.5 103 48.5 213.5 C 48.5 324 126 408 244 408 C 362 408 412 319 412 213.5 C 412 108 334 68.5 244 68.5 C 154 68.5 102.68 135.079 99 213.5 C 95.32 291.921 157 350 231 345.5 C 305 341 357.5 290 357.5 219.5 C 357.5 149 314 121 244 121 C 174 121 151.5 167 151.5 213.5 C 151.5 260 176 286.5 224.5 286.5 C 273 286.5 296.5 253 296.5 218.5 C 296.5 184 270 177 244 177 C 218 177 197 198 197 218.5 C 197 239 206 250.5 225.5 250.5 C 245 250.5 253 242 253 218.5"
fill="transparent"
strokeWidth="12"
stroke="rgba(255, 255, 255, 0.69)"
strokeLinecap="round"
initial={{ pathLength: 0 }}
animate={{ pathLength: 1 }}
transition={transition}
/>
</svg>
<motion.div
className="box"
initial={{ offsetDistance: "0%", scale: 2.5 }}
animate={{ offsetDistance: "100%", scale: 1 }}
transition={transition}
/>
</div>
)
}示例来源: Matt Perry:https://codesandbox.io/s/framer-motion-motion-along-a-path-41i3v
https://stackoverflow.com/questions/66920446
复制相似问题