什么是useSwipeable?一个让你轻易实现滑动效果的Hook

最近发现一个React非常好的用的滑动事件处理的钩子组件

Hook details

  • 钩子的使用需要react>=16.8.0
  • handlers中包含的道具当前是refonMouseDown请展开handlers,因为其中包含的道具可能会随着react提高事件侦听能力而改变

使用之前需要安装包

  • npm i react-swipeable

引入我们的hook

import { useSwipeable } from 'react-swipeable'

我们先来看看这个钩子接收的参数

  • 第一个参数: 对象的形式写上对应事件的处理函数
perl 复制代码
{
  onSwiped,       // 任何方向滑动触发 (SwipeEventData) => void
  onSwipedLeft,   // 向左滑动触发 (SwipeEventData) => void
  onSwipedRight,  // 向右滑动触发 (SwipeEventData) => void
  onSwipedUp,     // 向上滑动触发 (SwipeEventData) => void
  onSwipedDown,   // 向下滑动触发  (SwipeEventData) => void
  onSwipeStart,   // 滑动开始时触发 (SwipeEventData) => void *see details*
  onSwiping,      // 滑动过程中触发 (SwipeEventData) => void
  onTap,          // After a tap ({ event }) => void

  // 传递回调,提供事件: ({ event }) => void
  onTouchStartOrOnMouseDown, // 需要 'touchstart' 和 'mousedown'
  onTouchEndOrOnMouseUp,     // 需要 `touchend` 和 `mouseup`
}

详细细节

OnSwipeStart-每次开始时只调用一次,在第一个onSwiping回调之前,SwipeEventData的第一个属性将为真

  • 第二个参数: 关于滑动需要使用到的配置
ts 复制代码
{
  delta: 10,                             // 开始滑动的最小距离 单位(px)
  preventScrollOnSwipe: false,           // 在滑动的时候是否防止滚动
  trackTouch: true,                      // 是否使用触摸滑动
  trackMouse: false,                     // 是否使用光标滑动
  rotationAngle: 0,                      // 设置旋转角度
  swipeDuration: Infinity,               // 允许的滑动时间 单位(ms)
  touchEventOptions: { passive: true },  // 触摸监听器的选项
}

详细细节

触摸监听器的配置不详细展开了可以去参考官方文档 链接贴在下面了

react-swipeable - npm (npmjs.com)

了解完这些不废话了直接上代码

  • 这边我使用的案例 拓展antd的Tabs组件去支持滑动切换
tsx 复制代码
import { Tabs } from 'antd';
import { useSwipeable } from 'react-swipeable'; //引入useSwipeable

const { TabPane } = Tabs;

function SwipeableTabs() {
  const [activeKey, setActiveKey] = useState(1);
  // 使用useSwipeable
  const handlers = useSwipeable({
    // 记得增加边界判断 比如activeKey >= 0 
    onSwipedLeft: () => setActiveKey(prevKey + 1),
    onSwipedRight: () => setActiveKey(prevKey - 1)
    // 开启鼠标控制滑动
    trackMouse: true
  });

  return (
      {/* 展开使用 */}
      <div {...handlers}>
       <Tabs activeKey={activeKey} >
          <TabPane tab="Tab 1" key="1">
            Content of Tab Pane 1
          </TabPane>
          <TabPane tab="Tab 2" key="2">
            Content of Tab Pane 2
          </TabPane>
          <TabPane tab="Tab 3" key="3">
            Content of Tab Pane 3
          </TabPane>
        </Tabs>
      </div>
  );
}

最后就简单的实现了一个滑动的效果了 🤞

相关推荐
下雪天的夏风5 分钟前
TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
前端·javascript·typescript
diygwcom16 分钟前
electron-updater实现electron全量版本更新
前端·javascript·electron
Hello-Mr.Wang33 分钟前
vue3中开发引导页的方法
开发语言·前端·javascript
程序员凡尘1 小时前
完美解决 Array 方法 (map/filter/reduce) 不按预期工作 的正确解决方法,亲测有效!!!
前端·javascript·vue.js
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦6 小时前
JavaScript substring() 方法
前端
无心使然云中漫步7 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者7 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_7 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋8 小时前
AJAX 入门 day1
前端·javascript·ajax