React
Use Gesture 是一个支持丰富鼠标和触摸手势的 React 库。当使用鼠标或者触摸手势进行移动、缩放、拖动、滚动、捏合等操作时,Use Gesture可将这些事件绑定到任何组件或视图。通过使用接收到的数据,只需要几行代码就可以轻松搞定复杂多样的手势动作。
2021-09-02-19-17-54-656944.gif

如何使用

安装

使用 yarn:

  1. yarn add react-use-gesture

使用 npm:

  1. npm install --save react-use-gesture

举个栗子

下面的例子是使一个 <div/> 可拖动,拖动时它将跟随鼠标或手指移动,并在释放时返回其初始位置。

  1. import React from 'react'
  2. import { useDrag } from '@use-gesture/react'
  3. import { a, useSpring } from '@react-spring/web'
  4. import styles from './styles.module.css'
  5. export default function App() {
  6. const [style, api] = useSpring(() => ({ x: 0, y: 0, scale: 1 }))
  7. const bind = useDrag(({ active, movement: [x, y] }) => {
  8. api.start({
  9. x: active ? x : 0,
  10. y: active ? y : 0,
  11. scale: active ? 1.2 : 1
  12. })
  13. })
  14. return (
  15. <div className="flex fill center">
  16. <a.div tabIndex={-1} {...bind()} className={styles.drag} style={style} />
  17. </div>
  18. )
  19. }

效果如下:
2021-09-02-19-17-54-798939.gif
这其实是 useDrag hook 返回一个函数(存储在 bind 常数中),该函数在调用时会返回一个带有事件处理程序的对象。将 {...bind()} 扩展到某个组件中时,实际上是在添加 onMouseDownonTouchStart事件来处理。

可用 Hooks

useDrag 只是 React UseGesture 的其中一个 hook,它可以处理多种不同的手势。

Hook Description
useDrag 处理拖拽手势
useMove 处理鼠标移动
useHover 处理鼠标进入及离开时间
useScroll 处理滚动事件
useWheel 处理鼠标滚轮事件
usePinch 处理捏合手势
useGesture 处理多个手势

这个库更能与 React-spring 这样的动画库结合使用,解锁更多手势就是现在!