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

如何使用react-transition-group实现前进后退对应不同方向的滑动切换

你当前的代码固定了所有进入动画的初始位移为translateX(100%),也就是新页面永远从右侧进入,没有区分前进、返回两种场景的动画逻辑,同时原有退出动画的初始位移配置也存在错误,所以会出现方向一致的问题。

调整方案

1. 新增滑动方向状态

在你的步骤组件中新增状态记录滑动方向,点击下一步时标记为前进方向,点击返回时标记为后退方向:

import { useState } from 'react';
import { CSSTransition, TransitionGroup } from 'react-transition-group';

function Onboarding() {
  const [step, setStep] = useState(1);
  // 新增方向状态,可选值 forward/backward
  const [slideDirection, setSlideDirection] = useState('forward');

  const nextStep = () => {
    setSlideDirection('forward');
    setStep(prev => prev + 1);
  };

  const prevStep = () => {
    setSlideDirection('backward');
    setStep(prev => prev - 1);
  };

  // 其他业务逻辑省略
}

2. 动态绑定CSSTransition的类名前缀

根据滑动方向动态切换动画类名的前缀,不要使用固定的step前缀:

<TransitionGroup>
  <CSSTransition
    key={step}
    timeout={1000}
    // 动态类名前缀
    classNames={`step-${slideDirection}`}
  >
    <div className="onboarding-screen">
      {/* 当前步骤内容 */}
      <button onClick={prevStep}>返回</button>
      <button onClick={nextStep}>下一步</button>
    </div>
  </CSSTransition>
</TransitionGroup>

3. 补充两套方向的样式

分别编写前进、后退场景的进入、退出动画,修正原有退出动画的初始位移错误:

.onboarding-screen
    display flex
    flex-direction column
    flex-grow 1
    position absolute
    width 100%
    height 100%
    align-items center

    /* 前进场景:新页面右进,旧页面左出 */
    &.step-forward-enter
        transform translateX(100%)
        transition(all 1s)
    &.step-forward-enter-active
        transform translateX(0%)
        transition(all 1s)
    &.step-forward-enter-done
        position relative
    &.step-forward-exit
        transform translateX(0%)
        transition(all 1s)
    &.step-forward-exit-active
        transform translateX(-100%)
        transition(all 1s)
    &.step-forward-exit-done
        position relative

    /* 后退场景:新页面左进,旧页面右出 */
    &.step-backward-enter
        transform translateX(-100%)
        transition(all 1s)
    &.step-backward-enter-active
        transform translateX(0%)
        transition(all 1s)
    &.step-backward-enter-done
        position relative
    &.step-backward-exit
        transform translateX(0%)
        transition(all 1s)
    &.step-backward-exit-active
        transform translateX(100%)
        transition(all 1s)
    &.step-backward-exit-done
        position relative

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:02