当前位置:首页 > React

react实现左右滑动

2026-01-27 04:19:25React

实现左右滑动的常见方法

使用第三方库(如 react-swipeable) 安装 react-swipeable 库:

npm install react-swipeable

示例代码:

import { useSwipeable } from 'react-swipeable';

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

  return <div {...handlers}>滑动区域</div>;
}

使用原生 touch 事件 通过监听 touchstart、touchmove 和 touchend 事件实现:

function SwipeComponent() {
  let touchStartX = 0;

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

  const handleTouchEnd = (e) => {
    const touchEndX = e.changedTouches[0].clientX;
    if (touchEndX < touchStartX) {
      console.log('左滑');
    } else if (touchEndX > touchStartX) {
      console.log('右滑');
    }
  };

  return (
    <div 
      onTouchStart={handleTouchStart}
      onTouchEnd={handleTouchEnd}
    >
      滑动区域
    </div>
  );
}

使用 CSS Scroll Snap 纯 CSS 实现滑动效果:

function ScrollComponent() {
  return (
    <div style={{
      overflowX: 'auto',
      scrollSnapType: 'x mandatory',
      display: 'flex'
    }}>
      <div style={{ scrollSnapAlign: 'start', flex: '0 0 100%' }}>页面1</div>
      <div style={{ scrollSnapAlign: 'start', flex: '0 0 100%' }}>页面2</div>
    </div>
  );
}

使用 transform 动画 结合 useState 和 transform 实现平滑滑动:

react实现左右滑动

import { useState } from 'react';

function TransformComponent() {
  const [position, setPosition] = useState(0);

  const handleSwipe = (direction) => {
    const newPosition = direction === 'left' ? position - 100 : position + 100;
    setPosition(newPosition);
  };

  return (
    <div style={{ overflow: 'hidden' }}>
      <div 
        style={{ 
          display: 'flex',
          transform: `translateX(${position}px)`,
          transition: 'transform 0.3s ease'
        }}
      >
        <div style={{ width: '100px' }}>内容1</div>
        <div style={{ width: '100px' }}>内容2</div>
      </div>
      <button onClick={() => handleSwipe('left')}>左滑</button>
      <button onClick={() => handleSwipe('right')}>右滑</button>
    </div>
  );
}

选择建议

  • 需要简单手势检测时,推荐使用 react-swipeable
  • 需要高性能原生实现时,使用 touch 事件方案
  • 需要简单内容滑动时,CSS Scroll Snap 最轻量
  • 需要自定义动画效果时,transform 方案最灵活

每种方案都可以根据具体需求进行扩展,例如添加滑动阈值判断、动画回调等。

标签: react
分享给朋友:

相关文章

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何迭代

react如何迭代

在 React 中迭代数组或对象 React 提供了多种方式来处理数组或对象的迭代,以下是常见的方法: 使用 map 方法迭代数组 map 是 JavaScript 数组的内置方法,常用于在 Rea…

react如何调度

react如何调度

React 调度机制概述 React 的调度机制通过 Fiber 架构 和 Scheduler 模块实现任务优先级管理与时间切片(Time Slicing),确保高优先级更新(如用户交互)能快速响应,…

react如何重启

react如何重启

重启 React 应用的方法 重新加载当前页面 使用 window.location.reload() 强制刷新页面,这会重新加载整个应用并重置所有状态。 window.location…

react如何扩展

react如何扩展

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

如何升级react native

如何升级react native

升级 React Native 的步骤 检查当前版本 运行以下命令查看当前项目的 React Native 版本: react-native --version 更新 React Native CL…