当前位置:首页 > React

react如何实现跳转过渡

2026-03-11 12:39:40React

实现页面跳转过渡的方法

在React中实现页面跳转过渡效果,通常需要结合路由库和动画库。以下是几种常见方法:

使用React Transition Group与React Router

安装必要依赖:

npm install react-transition-group react-router-dom

示例代码实现淡入淡出效果:

import { TransitionGroup, CSSTransition } from 'react-transition-group'
import { Switch, Route, useLocation } from 'react-router-dom'

function App() {
  const location = useLocation()

  return (
    <TransitionGroup>
      <CSSTransition
        key={location.key}
        timeout={300}
        classNames="fade"
      >
        <Switch location={location}>
          <Route path="/" exact component={Home} />
          <Route path="/about" component={About} />
        </Switch>
      </CSSTransition>
    </TransitionGroup>
  )
}

添加CSS过渡样式:

.fade-enter {
  opacity: 0;
}

.fade-enter-active {
  opacity: 1;
  transition: opacity 300ms;
}

.fade-exit {
  opacity: 1;
}

.fade-exit-active {
  opacity: 0;
  transition: opacity 300ms;
}

使用Framer Motion动画库

Framer Motion提供更强大的动画控制:

npm install framer-motion

示例实现滑动过渡:

import { AnimatePresence, motion } from 'framer-motion'
import { Switch, Route, useLocation } from 'react-router-dom'

function App() {
  const location = useLocation()

  return (
    <AnimatePresence exitBeforeEnter>
      <Switch location={location} key={location.pathname}>
        <Route path="/" exact>
          <motion.div
            initial={{ x: 300, opacity: 0 }}
            animate={{ x: 0, opacity: 1 }}
            exit={{ x: -300, opacity: 0 }}
            transition={{ duration: 0.5 }}
          >
            <Home />
          </motion.div>
        </Route>
      </Switch>
    </AnimatePresence>
  )
}

使用React Spring物理动画

React Spring基于物理属性实现更自然的过渡:

npm install react-spring

示例代码:

import { useTransition, animated } from 'react-spring'
import { Switch, Route, useLocation } from 'react-router-dom'

function App() {
  const location = useLocation()

  const transitions = useTransition(location, {
    from: { opacity: 0, transform: 'translate3d(100%,0,0)' },
    enter: { opacity: 1, transform: 'translate3d(0%,0,0)' },
    leave: { opacity: 0, transform: 'translate3d(-50%,0,0)' }
  })

  return transitions((props, item) => (
    <animated.div style={props}>
      <Switch location={item}>
        <Route path="/" exact component={Home} />
      </Switch>
    </animated.div>
  ))
}

自定义Hook实现页面过渡

创建自定义Hook管理过渡状态:

function usePageTransition() {
  const [isTransitioning, setIsTransitioning] = useState(false)

  const startTransition = useCallback(() => {
    setIsTransitioning(true)
    return new Promise(resolve => {
      setTimeout(() => {
        setIsTransitioning(false)
        resolve()
      }, 500)
    })
  }, [])

  return { isTransitioning, startTransition }
}

在组件中使用:

react如何实现跳转过渡

function Navigation() {
  const { startTransition } = usePageTransition()
  const history = useHistory()

  const navigate = async (path) => {
    await startTransition()
    history.push(path)
  }

  return (
    <button onClick={() => navigate('/about')}>
      Go to About
    </button>
  )
}

注意事项

  • 过渡时间应与实际路由切换时间匹配,避免动画未完成就显示新内容
  • 移动端需要考虑性能优化,复杂动画可能导致卡顿
  • 对于SEO敏感项目,确保过渡动画不会影响内容可抓取性
  • 测试不同路由切换场景,如前进/后退/直接访问等

以上方法可根据项目需求选择,简单过渡推荐React Transition Group,复杂动画推荐Framer Motion或React Spring。

分享给朋友:

相关文章

h5实现登录页面跳转页面跳转页面跳转

h5实现登录页面跳转页面跳转页面跳转

使用HTML5实现登录页面跳转 在HTML5中实现登录页面跳转可以通过多种方式完成,包括表单提交、JavaScript跳转和超链接跳转。以下是几种常见的实现方法。 表单提交跳转 使用HTML表单的a…

react 如何跳转

react 如何跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖 npm install react…

js双击事件如何实现

js双击事件如何实现

实现双击事件的方法 在JavaScript中,可以通过监听dblclick事件或手动检测两次点击的时间间隔来实现双击事件。以下是几种常见的方法: 使用原生dblclick事件 element…

vue如何实现拖动

vue如何实现拖动

Vue 实现拖动的常用方法 使用 HTML5 原生拖放 API HTML5 提供了原生的拖放 API,可以通过 draggable 属性和相关事件实现拖动功能。 <template>…

vue如何实现原理

vue如何实现原理

Vue 实现原理的核心机制 Vue.js 的核心实现原理基于响应式系统、虚拟 DOM 和组件化设计。以下是关键机制的详细解析: 响应式系统 Vue 通过 Object.defineProperty(…

vue如何实现计算

vue如何实现计算

Vue 计算属性的实现方法 在 Vue 中,计算属性(computed properties)是一种基于响应式依赖进行缓存的属性,适用于处理复杂逻辑或依赖其他数据属性的场景。以下是实现计算属性的几种方…