You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用react-spring实现SVG组件绕中心点持续跷跷板摆动?

实现SVG组件绕中心点的跷跷板摆动动画

要实现像跷跷板一样的绕点摆动,核心是利用CSS旋转(rotate)配合transform-origin指定旋转中心,而非平移(translate)。以下是具体修改方案:

1. 确定并设置旋转中心

先估算SVG <g> 元素的中心点(根据你提供的路径坐标,这个组件的中心点大致为 (317px, 100px),可根据视觉效果微调),将其设为旋转原点。

2. 重构react-spring动画逻辑

放弃手动定时器切换状态的方式,改用react-spring内置的loop属性实现持续往复旋转,代码更简洁且动画更流畅。

修改后的App.tsx代码

import React from 'react';
import { useSpring } from '@react-spring/web';
import Hangingbar from './Hangingbar';

const App = () => {
    const hangingBarSpring = useSpring({
        // 设置旋转原点为组件中心点
        transformOrigin: '317px 100px',
        // 定义摆动角度:从-5°到5°再回到-5°,形成往复摆动
        rotate: [-5, 5, -5],
        // 动画时长3秒,可根据需求调整
        config: { duration: 3000 },
        // 开启循环动画
        loop: true
    })

    return (
        <svg width="661" height="451" viewBox="0 0 661 451" fill="none" xmlns="http://www.w3.org/2000/svg">
            <Hangingbar styles={hangingBarSpring} />
        </svg>
    )
}

export default App;

额外优化提示

如果想要更贴近真实跷跷板的弹性效果,可以替换config参数为弹簧物理配置:

config: { tension: 120, friction: 15 }

通过调整tension(张力)和friction(摩擦力)数值,能模拟出更自然的摆动衰减和回弹效果。

内容的提问来源于stack exchange,提问作者japheth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:45:43