当前位置:首页 > 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 如何引入jquery

react 如何引入jquery

安装 jQuery 库 在 React 项目中引入 jQuery 的第一步是安装 jQuery。可以通过 npm 或 yarn 安装: npm install jquery # 或 yarn a…

react如何保养

react如何保养

保持组件简洁 将大型组件拆分为更小、更专注的组件,每个组件只负责单一功能。避免在单个组件中处理过多逻辑或状态,这有助于提高可维护性和可测试性。 合理使用状态管理 根据应用复杂度选择状态管理方案。简单…

react native 如何

react native 如何

React Native 开发基础 React Native 是一个用于构建跨平台移动应用的框架,允许开发者使用 JavaScript 和 React 编写代码,同时生成原生 iOS 和 Androi…

react native如何启动

react native如何启动

如何启动 React Native 项目 安装 Node.js 和 npm 确保已安装 Node.js(建议版本 16 或更高)和 npm(Node.js 自带)。可通过以下命令检查版本: node…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在…

react如何销毁

react如何销毁

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