效果

多个元素间隔一定时间依次执行指定动画。

如视频中所示的多元素依次淡入的效果:

> 下载演示视频 <

教程

引入react-spring库

import { useTrail, a } from '@react-spring/web';

创建动画序列

  const trailDelayIndex = 5;
  const trail = useTrail(trailDelayIndex + 6, {
    config: { mass: 2, tension: 2400, friction: 180 },
    opacity: 1,
    y: 0,
    from: { opacity: 0, y: 50 },
  });

或用这个动画参数config: { mass: 1, tension: 1700, friction: 100 },

使用动画序列

  <a.div style={trail[trailDelayIndex + 0]}>...</a.div>
  <a.div style={trail[trailDelayIndex + 1]}>...</a.div>

像这样,在style中使用trail序列中的某个位次的样式,即可获得这个配置的trail的动效。

扩展:react-spring物理动效

react-spring 是一个流行的 React 库,用于创建自然的弹簧动画效果。它通过物理原理模拟现实世界的动态,使界面元素的移动、缩放、旋转等动效更加流畅和自然。在配置 react-spring 的物理动效时,主要涉及到调整几个关键的动画参数,以达到想要的效果。

基本用法

react-spring 允许你通过一组简单的配置来定义动画。这些配置包括初始状态、结束状态以及一些特定的动画参数,如弹性(tension)、摩擦(friction)、质量(mass)等。

配置参数

  1. tension(张力):

    • 控制弹簧的硬度,张力越大,弹簧越硬,动画开始时加速度越大。
    • 默认值为 170
  2. friction(摩擦):

    • 控制运动中的阻力,摩擦力越大,动画越快停止。
    • 默认值为 26
  3. mass(质量):

    • 影响动画的质量,质量越大,动画需要更多的力才能加速和减速。
    • 默认值为 1
  4. precision(精度):

    • 决定动画停止的条件,精度越高,动画在完全停止前的移动越小。
    • 默认值为 0.01
  5. velocity(速度):

    • 初始的速度,可以定义为动画开始时的初速度。
    • 默认值为 0
  6. clamp:

    • 当设置为 true 时,动画不会超过其结束值。
    • 默认用于防止弹簧动画在结束时超过其目标状态。

示例代码

下面是一个使用 react-spring 的简单示例,展示一个元素从左到右的平移动画:

import { useSpring, animated } from 'react-spring';

function App() {
  const props = useSpring({
    from: { transform: 'translateX(0%)' },
    to: { transform: 'translateX(100%)' },
    config: { mass: 1, tension: 170, friction: 26 }
  });

  return <animated.div style={props}>Move me!</animated.div>;
}

实用提示

  • 实验不同的配置:为了获得最佳效果,通常需要根据具体情况调整 tensionfrictionmass 的值。较低的 tension 和较高的 friction 可以产生柔和的弹性效果;较高的 tension 和较低的 friction 可以产生迅速而有弹性的效果。
  • 使用预设react-spring 提供了一些预设的动画配置,如 gentlewobblystiffslowmolasses。这些可以作为快速开始和基准测试的起点。
  • 使用 trailchain 功能:对于一系列元素的动画,可以使用 trailchain 功能来制定元素之间的动画延迟和顺序,创建更复杂的动效序列。

通过这些配置和技巧,你可以充分利用 react-spring 来创建直观、引人入胜的界面动效。

常用动画参数

react-spring 中,动画参数主要通过配置对象来控制,这些参数包括 masstensionfriction 等,这些参数影响动画的“物理”行为。理解每个参数如何影响动画对于创建平滑自然的动效非常重要。下面是一些常用的 react-spring 动画参数配置推荐:

1. 弹性动画(Bouncy Animation)

这种动画给人一种弹性和活泼的感觉,适合弹出窗口和弹跳提示。

{
  tension: 170,
  friction: 26
}

2. 温和的过渡(Gentle Transition)

这种配置提供了平滑且较慢的过渡效果,适合加载动画或视图之间的过渡。

{
  tension: 120,
  friction: 14
}

3. 慢速过渡(Slow Transition)

更慢和更平滑的动画效果,适用于需要更细致观察的动画效果。

{
  mass: 1,
  tension: 280,
  friction: 60
}

4. 快速回弹(Quick Snappy)

快速且具有明显回弹效果的动画,适合按钮点击反馈或小部件弹出。

{
  tension: 300,
  friction: 15
}

5. 橡皮筋效果(Rubber Band Effect)

当你希望元素具有拉伸然后回弹的效果时,这种配置效果明显。

{
  mass: 1,
  tension: 180,
  friction: 12,
  clamp: true  // 防止过度弹跳
}

6. 物理阻尼效果(Damped Motion)

平滑减速停止的动画,适合列表滚动或拖拽动画。

{
  mass: 1,
  tension: 210,
  friction: 20
}

使用示例

这些参数可以直接在 useSpringuseTrail 等 Hook 中使用。例如,创建一个弹性弹出动画:

import { useSpring, animated } from 'react-spring';

function BouncyComponent() {
  const props = useSpring({
    to: { opacity: 1, transform: 'scale(1)' },
    from: { opacity: 0, transform: 'scale(0.5)' },
    config: { tension: 170, friction: 26 }
  });

  return <animated.div style={props}>Bouncy Animation!</animated.div>;
}

通过调整这些参数,你可以创造出适合不同场景需求的动画效果。实际应用时,根据具体需求和设计风格适当调整参数,以达到最佳的动画效果。


A Student on the way to full stack of Web3.