当前位置:首页 > React

react实现全屏滚动

2026-01-27 05:20:42React

实现全屏滚动的 React 方案

全屏滚动(Full Page Scroll)是一种常见的网页交互效果,用户滚动鼠标或触摸屏幕时,页面会整屏切换。以下是几种实现方法:

使用 react-full-page 库

安装依赖:

npm install react-full-page

基本用法:

import { FullPage, Slide } from 'react-full-page';

function App() {
  return (
    <FullPage>
      <Slide>
        <div style={{ height: '100vh', background: 'red' }}>第一屏</div>
      </Slide>
      <Slide>
        <div style={{ height: '100vh', background: 'blue' }}>第二屏</div>
      </Slide>
    </FullPage>
  );
}

使用原生 CSS + React 实现

通过监听滚动事件和 CSS 定位实现:

import { useState, useEffect } from 'react';

function FullPageScroll({ children }) {
  const [currentIndex, setCurrentIndex] = useState(0);

  useEffect(() => {
    const handleWheel = (e) => {
      if (e.deltaY > 0) {
        setCurrentIndex(prev => Math.min(prev + 1, children.length - 1));
      } else {
        setCurrentIndex(prev => Math.max(prev - 1, 0));
      }
    };

    window.addEventListener('wheel', handleWheel);
    return () => window.removeEventListener('wheel', handleWheel);
  }, [children.length]);

  return (
    <div style={{ overflow: 'hidden', height: '100vh' }}>
      <div style={{ 
        transform: `translateY(-${currentIndex * 100}vh)`,
        transition: 'transform 0.5s ease'
      }}>
        {React.Children.map(children, child => (
          <div style={{ height: '100vh' }}>{child}</div>
        ))}
      </div>
    </div>
  );
}

使用 react-scroll 库

另一种轻量级方案:

npm install react-scroll

示例代码:

import { Link, animateScroll as scroll } from 'react-scroll';

function App() {
  return (
    <div>
      <Link to="section1" smooth={true} duration={500}>Section 1</Link>
      <div name="section1" style={{ height: '100vh' }}>第一屏</div>
      <div name="section2" style={{ height: '100vh' }}>第二屏</div>
    </div>
  );
}

触摸设备支持

对于移动端需要添加 touch 事件处理:

react实现全屏滚动

useEffect(() => {
  let startY = 0;

  const handleTouchStart = (e) => {
    startY = e.touches[0].clientY;
  };

  const handleTouchEnd = (e) => {
    const endY = e.changedTouches[0].clientY;
    if (startY - endY > 50) { // 上滑
      setCurrentIndex(prev => Math.min(prev + 1, children.length - 1));
    } else if (endY - startY > 50) { // 下滑
      setCurrentIndex(prev => Math.max(prev - 1, 0));
    }
  };

  window.addEventListener('touchstart', handleTouchStart);
  window.addEventListener('touchend', handleTouchEnd);

  return () => {
    window.removeEventListener('touchstart', handleTouchStart);
    window.removeEventListener('touchend', handleTouchEnd);
  };
}, [children.length]);

性能优化建议

  • 使用 CSS will-change: transform 提升动画性能
  • 对非当前屏的内容使用懒加载
  • 避免在滚动回调中执行重计算操作
  • 考虑使用 requestAnimationFrame 优化滚动动画

以上方案可根据项目需求选择,库方案更快捷,原生实现更灵活可控。

标签: 全屏react
分享给朋友:

相关文章

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

react架构如何

react架构如何

React 架构核心概念 React 的架构围绕组件化、虚拟 DOM 和单向数据流设计。组件是构建用户界面的独立模块,分为函数组件和类组件。虚拟 DOM 通过高效的 Diff 算法减少直接操作真实 D…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

react如何折叠

react如何折叠

在 React 中实现折叠功能 使用 useState 管理折叠状态 通过 useState 定义一个状态变量来控制折叠面板的显示与隐藏。例如: const [isCollapsed, setIsC…

小白如何搭建react

小白如何搭建react

安装 Node.js 和 npm 确保系统已安装 Node.js(包含 npm)。可通过官网下载安装包(https://nodejs.org/),选择 LTS 版本。安装完成后,终端运行以下命令验证版…

如何实操react

如何实操react

安装 React 环境 使用 create-react-app 快速搭建项目: npx create-react-app my-app cd my-app npm start 项目启动后默认在…