当前位置:首页 > React

react实现全屏滚动

2026-01-27 05:20:42React

实现全屏滚动的 React 方案

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

使用 react-full-page 库

安装依赖:

npm install react-full-page

基本用法:

react实现全屏滚动

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 库

另一种轻量级方案:

react实现全屏滚动

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 事件处理:

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 是一个用于构建用户界面的 JavaScript 库,专注于组件化开发。通过虚拟 DOM 和高效的渲染机制,React 能够实现高性能的 UI 更新。 安装 Re…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

react 如何启动

react 如何启动

创建 React 项目 使用官方工具 create-react-app 快速初始化项目,需提前安装 Node.js(版本 ≥ 14.0.0)和 npm/yarn: npx create-react-…

如何恢复react

如何恢复react

恢复 React 项目的方法 检查并修复依赖项 运行 npm install 或 yarn install 重新安装所有依赖项。如果依赖项损坏或缺失,这将恢复项目所需的库和工具。 恢复删除的文件 如…

如何监控react性能

如何监控react性能

使用 React Profiler API React 16.5 及以上版本内置了 Profiler API,可直接测量组件渲染时间。通过 <React.Profiler> 包裹目标组件,…

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from './…