当前位置:首页 > React

react实现整屏滚动

2026-01-27 11:34:47React

React 实现整屏滚动

整屏滚动(Full Page Scroll)是一种常见的网页交互效果,用户每次滚动鼠标或触摸屏幕时,页面会平滑地滚动到下一个完整视口高度的部分。以下是几种实现方法:

使用 react-full-page 库

react-full-page 是一个专门用于实现整屏滚动的 React 组件库,支持触摸和鼠标滚轮事件。

安装依赖:

npm install react-full-page

示例代码:

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

const App = () => {
  return (
    <FullPage>
      <Slide style={{ backgroundColor: '#ff5f45' }}>
        <h1>第一屏</h1>
      </Slide>
      <Slide style={{ backgroundColor: '#0798ec' }}>
        <h1>第二屏</h1>
      </Slide>
      <Slide style={{ backgroundColor: '#fc6c7c' }}>
        <h1>第三屏</h1>
      </Slide>
    </FullPage>
  );
};

export default App;

使用 CSS 和 React 状态控制

通过 CSS 的 scroll-snap 属性和 React 的状态管理实现。

CSS 部分:

.container {
  height: 100vh;
  overflow-y: scroll;
  scroll-snap-type: y mandatory;
}

.section {
  height: 100vh;
  scroll-snap-align: start;
}

React 组件:

import React from 'react';
import './styles.css';

const App = () => {
  return (
    <div className="container">
      <div className="section" style={{ backgroundColor: '#ff5f45' }}>
        <h1>第一屏</h1>
      </div>
      <div className="section" style={{ backgroundColor: '#0798ec' }}>
        <h1>第二屏</h1>
      </div>
      <div className="section" style={{ backgroundColor: '#fc6c7c' }}>
        <h1>第三屏</h1>
      </div>
    </div>
  );
};

export default App;

使用 react-scroll 库

react-scroll 提供了更灵活的滚动控制,支持动画和锚点跳转。

安装依赖:

npm install react-scroll

示例代码:

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

const App = () => {
  return (
    <div>
      <Link to="section1" smooth={true} duration={500}>
        跳转到第一屏
      </Link>
      <div id="section1" style={{ height: '100vh', backgroundColor: '#ff5f45' }}>
        <h1>第一屏</h1>
      </div>
      <div id="section2" style={{ height: '100vh', backgroundColor: '#0798ec' }}>
        <h1>第二屏</h1>
      </div>
    </div>
  );
};

export default App;

自定义实现

通过监听滚动事件和手动控制滚动位置实现。

示例代码:

react实现整屏滚动

import React, { useState, useEffect } from 'react';

const App = () => {
  const [currentSection, setCurrentSection] = useState(0);

  useEffect(() => {
    const handleWheel = (e) => {
      e.preventDefault();
      const direction = e.deltaY > 0 ? 1 : -1;
      const newSection = Math.max(0, Math.min(2, currentSection + direction));
      setCurrentSection(newSection);
      window.scrollTo({
        top: newSection * window.innerHeight,
        behavior: 'smooth',
      });
    };

    window.addEventListener('wheel', handleWheel, { passive: false });
    return () => window.removeEventListener('wheel', handleWheel);
  }, [currentSection]);

  return (
    <div>
      <div style={{ height: '100vh', backgroundColor: '#ff5f45' }}>
        <h1>第一屏</h1>
      </div>
      <div style={{ height: '100vh', backgroundColor: '#0798ec' }}>
        <h1>第二屏</h1>
      </div>
      <div style={{ height: '100vh', backgroundColor: '#fc6c7c' }}>
        <h1>第三屏</h1>
      </div>
    </div>
  );
};

export default App;

注意事项

  • 性能优化:避免在滚动事件中频繁触发重渲染,使用防抖或节流技术。
  • 移动端适配:确保触摸事件的处理与鼠标滚轮事件一致。
  • 无障碍访问:为屏幕阅读器提供适当的 ARIA 属性。

以上方法可以根据项目需求选择,库封装的方式更适合快速开发,而自定义实现则提供更高的灵活性。

标签: react
分享给朋友:

相关文章

react如何使用

react如何使用

React 的基本使用 React 是一个用于构建用户界面的 JavaScript 库,以下是一些核心概念和使用方法。 安装 React 通过 create-react-app 快速搭建 React…

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

如何改造react

如何改造react

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

如何用react

如何用react

使用React的基本步骤 安装Node.js和npm 确保系统已安装Node.js和npm。Node.js自带npm,可从官网下载安装包。安装完成后,通过命令行验证版本: node -v npm -…

react如何安装

react如何安装

安装React的步骤 确保已安装Node.js(建议版本12或更高),可通过以下命令检查版本: node -v npm -v 使用Create React App快速搭建项目(推荐): npx c…