React use-gesture介绍

use-gesture 是一个用于处理手势事件的 React Hook 库,能够轻松地实现拖动、缩放、旋转等手势功能。它的设计灵活,适用于移动设备和桌面应用。

在这个教程中,我们将逐步学习如何使用 use-gesture 库来处理基本的手势事件。


1. 安装 use-gesture

首先,确保你有一个 React 项目。如果还没有,可以使用 Create React App 创建一个新项目:

perl 复制代码
bash
复制代码
npx create-react-app my-gesture-app
cd my-gesture-app

接下来,安装 use-gesture

bash 复制代码
bash
复制代码
npm install @use-gesture/react

2. 创建基本的手势组件

我们将创建一个简单的手势组件,让用户可以拖动一个方块。

src 文件夹中,创建一个新的组件文件 DraggableBox.js

ini 复制代码
javascript
复制代码
import React from 'react';
import { useDrag } from '@use-gesture/react';

const DraggableBox = () => {
  const bind = useDrag((state) => {
    console.log(state.offset); // 打印拖动的位移
    const x = state.offset[0];
    const y = state.offset[1];
    document.getElementById('box').style.transform = `translate(${x}px, ${y}px)`;
  });

  return (
    <div
      id="box"
      {...bind()} // 绑定手势事件
      style={{
        width: '100px',
        height: '100px',
        backgroundColor: 'skyblue',
        borderRadius: '10px',
        position: 'absolute',
      }}
    />
  );
};

export default DraggableBox;

3. 使用组件

src/App.js 中使用 DraggableBox 组件:

javascript 复制代码
javascript
复制代码
import React from 'react';
import DraggableBox from './DraggableBox';

function App() {
  return (
    <div style={{ height: '100vh', position: 'relative' }}>
      <h1>Drag the Box!</h1>
      <DraggableBox />
    </div>
  );
}

export default App;

4. 运行项目

在项目根目录下,启动开发服务器:

sql 复制代码
bash
复制代码
npm start

打开浏览器访问 http://localhost:3000,你会看到一个可拖动的蓝色方块。


5. 添加更多手势

use-gesture 还支持其他手势,比如缩放和旋转。下面是如何实现缩放的示例。

DraggableBox.js 中,添加缩放功能:

ini 复制代码
javascript
复制代码
import React, { useRef } from 'react';
import { useDrag, usePinch } from '@use-gesture/react';

const DraggableBox = () => {
  const boxRef = useRef(null);
  const bindDrag = useDrag((state) => {
    const x = state.offset[0];
    const y = state.offset[1];
    boxRef.current.style.transform = `translate(${x}px, ${y}px) scale(${state.offset[2] || 1})`;
  });

  const bindPinch = usePinch((state) => {
    const scale = state.offset[0];
    boxRef.current.style.transform = `scale(${scale})`;
  });

  return (
    <div
      ref={boxRef}
      {...bindDrag()} // 绑定拖动手势
      {...bindPinch()} // 绑定缩放手势
      style={{
        width: '100px',
        height: '100px',
        backgroundColor: 'skyblue',
        borderRadius: '10px',
        position: 'absolute',
      }}
    />
  );
};

export default DraggableBox;

6. 运行并测试缩放

保存更改后,重新加载页面。现在你可以使用两个手指进行缩放操作。


总结

通过这个教程,你学习了如何使用 use-gesture 库来处理基本的手势事件,包括拖动和缩放。这个库使得在 React 应用中实现复杂的手势交互变得简单高效。

可以尝试添加更多的手势和样式来扩展你的组件,比如旋转手势和更复杂的 UI 元素。

相关推荐
鹏多多5 小时前
移动端H5项目,还需要react-fastclick解决300ms点击延迟吗?
前端·javascript·react.js
空白诗6 小时前
React Native 鸿蒙跨平台开发:react-native-svg 矢量图形 - 自定义图标与动画
react native·react.js·harmonyos
liyang_ii6 小时前
createAsyncThunk
react.js
Jing_Rainbow6 小时前
【React-6/Lesson89(2025-12-27)】React Context 详解:跨层级组件通信的最佳实践📚
前端·react.js·前端框架
Dragon Wu7 小时前
Electron Forge集成React Typescript完整步骤
前端·javascript·react.js·typescript·electron·reactjs
一心赚狗粮的宇叔7 小时前
03.Node.js依赖包补充说明及React&Node.Js项目
前端·react.js·node.js
空白诗8 小时前
高级进阶 React Native 鸿蒙跨平台开发:slider 滑块组件 - 进度条与评分系统
javascript·react native·react.js
空白诗8 小时前
高级进阶React Native 鸿蒙跨平台开发:slider 滑块组件 - 音量调节器完整实现
react native·react.js·harmonyos
早點睡3908 小时前
高级进阶 React Native 鸿蒙跨平台开发:react-native-device-info 设备信息获取
react native·react.js·harmonyos
lbb 小魔仙1 天前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js