当前位置:首页 > React

react实现左右滑动导航

2026-01-27 11:54:50React

使用 react-swipeable 实现左右滑动导航

安装 react-swipeable 库

npm install react-swipeable

创建可滑动导航组件

import { useSwipeable } from 'react-swipeable';

function SwipeableNav() {
  const handlers = useSwipeable({
    onSwipedLeft: () => console.log('向左滑动'),
    onSwipedRight: () => console.log('向右滑动'),
    preventDefaultTouchmoveEvent: true,
    trackMouse: true
  });

  return (
    <div {...handlers}>
      {/* 导航内容 */}
    </div>
  );
}

使用 react-slick 实现轮播式导航

安装 react-slick

npm install react-slick slick-carousel

创建滑动导航组件

react实现左右滑动导航

import Slider from 'react-slick';

function SlideNav() {
  const settings = {
    dots: true,
    infinite: true,
    speed: 500,
    slidesToShow: 3,
    slidesToScroll: 1,
    swipeToSlide: true,
    responsive: [
      {
        breakpoint: 768,
        settings: {
          slidesToShow: 1
        }
      }
    ]
  };

  return (
    <Slider {...settings}>
      <div>导航项1</div>
      <div>导航项2</div>
      <div>导航项3</div>
    </Slider>
  );
}

使用纯CSS和React状态实现

创建自定义滑动组件

import { useState } from 'react';

function CustomSwipeNav() {
  const [position, setPosition] = useState(0);
  const [startX, setStartX] = useState(null);

  const handleTouchStart = (e) => {
    setStartX(e.touches[0].clientX);
  };

  const handleTouchMove = (e) => {
    if (!startX) return;
    const currentX = e.touches[0].clientX;
    const diff = startX - currentX;

    if (Math.abs(diff) > 50) {
      setPosition(prev => diff > 0 
        ? Math.min(prev + 100, 0) 
        : Math.max(prev - 100, -200));
      setStartX(null);
    }
  };

  return (
    <div 
      style={{ 
        overflow: 'hidden',
        position: 'relative',
        width: '100%'
      }}
    >
      <div
        style={{
          display: 'flex',
          transform: `translateX(${position}px)`,
          transition: 'transform 0.3s ease'
        }}
        onTouchStart={handleTouchStart}
        onTouchMove={handleTouchMove}
      >
        {[...Array(5)].map((_, i) => (
          <div key={i} style={{ minWidth: '100px' }}>
            导航项{i+1}
          </div>
        ))}
      </div>
    </div>
  );
}

使用 Framer Motion 实现动画滑动

安装 Framer Motion

npm install framer-motion

创建动画滑动导航

react实现左右滑动导航

import { motion, useDragControls } from 'framer-motion';

function AnimatedSwipeNav() {
  const dragControls = useDragControls();

  return (
    <motion.div
      style={{
        display: 'flex',
        cursor: 'grab',
        userSelect: 'none'
      }}
      drag="x"
      dragConstraints={{ left: -200, right: 0 }}
      dragControls={dragControls}
    >
      {[...Array(5)].map((_, i) => (
        <motion.div 
          key={i} 
          style={{ minWidth: '100px' }}
          whileTap={{ scale: 0.95 }}
        >
          导航项{i+1}
        </motion.div>
      ))}
    </motion.div>
  );
}

性能优化建议

为滑动导航添加will-change属性提升性能

<div style={{ willChange: 'transform' }}>
  {/* 导航内容 */}
</div>

使用React.memo优化组件性能

const MemoizedNavItem = React.memo(function NavItem({ text }) {
  return <div>{text}</div>;
});

考虑使用虚拟滚动技术处理大量导航项

import { Virtuoso } from 'react-virtuoso';

function VirtualSwipeNav() {
  return (
    <Virtuoso
      style={{ width: '100%', height: '50px' }}
      totalCount={100}
      itemContent={index => <div>导航项{index + 1}</div>}
      overscan={3}
    />
  );
}

标签: react
分享给朋友:

相关文章

react如何销毁

react如何销毁

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

如何记忆react

如何记忆react

理解核心概念 React的核心概念包括组件、状态(state)、属性(props)、生命周期方法(类组件)和钩子(函数组件)。掌握这些基础概念是记忆React的关键。组件是React应用的构建块,分为…

react如何动画

react如何动画

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

react 如何启动

react 如何启动

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

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react如何扩展

react如何扩展

扩展 React 项目的常用方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式。通过包裹组件并注入额外属性或逻辑,可以实现功能扩展。例如,一个日志记录的高阶组件: function…