特点
-
支持鼠标和手指操作,底层统一了Touch和Mouse事件处理
-
封装了 tap ,doubleTap (双击), longTap(长按), rotate (旋转) pinch (缩放) pressMove (手指拖动) swipe (判断手指拖动方向) 等方法
-
使用 TypeScript 编写,内置 TypeScript 类型定义文件,良好的智能提示
-
支持js原生使用
-
桌面和移动端组件库 react-uni-comps 涉及鼠标手势操作的依赖库
使用
安装 npm i w-touch
- js 调用 (Touch构造函数)
import Touch from 'w-touch';
// 构造对象
const t = new Touch(el,options);
// 销毁对象
t.destroy();
options 事件配置
type Options = Partial<{
onTouchStart: (evt: WTouchEvent) => void;
onTouchMove: (evt: WTouchEvent) => void;
onTouchEnd: (evt: WTouchEvent) => void;
onTouchCancel: (evt: WTouchEvent) => void;
onMultipointStart: (evt: WTouchEvent) => void;
onMultipointEnd: (evt: WTouchEvent) => void;
/** 点两次 */
onDoubleTap: () => void;
/** 长按 */
onLongTap: () => void;
/** 按一次 */
onSingleTap: () => void;
/** 旋转, 单位:deg */
onRotate: (evt: WTouchEvent & { angle: number }) => void;
/** 缩放 */
onPinch: (evt: WTouchEvent & { scale: number }) => void;
/** 单指滑动 */
onPressMove: (evt: WTouchEvent & { deltaX: number; deltaY: number }) => void;
/** 左右滑动 */
onSwipe: (evt: WTouchEvent & { direction: 'left' | 'right' | 'up' | 'down' }) => void;
/** 双指滑动 */
onTwoFingerPressMove: (evt: WTouchEvent & { deltaX: number; deltaY: number }) => void;
}>;
- React 调用 (TouchElement组件) 在线demo
import React, { useRef, useEffect } from 'react';
import { AutoCenter, Toast } from 'react-uni-comps';
import DemoBlock from './common/DemoBlock';
import { TouchElement } from 'w-touch';
type Position = {
x: number;
y: number;
angle: number;
scale: number;
};
const update = (el, transform, statusEl) => {
const cssTransform = `translate(${transform.x}px,${transform.y}px) rotate(${transform.angle}deg) scale(${transform.scale})`;
el.style.transform = cssTransform;
statusEl.innerText = cssTransform;
};
export default function App() {
const ref = useRef<Position>({ x: 0, y: 0, angle: 0, scale: 1 });
const elRef = useRef<HTMLDivElement>();
const statusElRef = useRef<HTMLDivElement>();
useEffect(() => {
update(elRef.current, ref.current, statusElRef.current);
}, []);
return (
<TouchElement
onDoubleTap={() => {
Toast.show('doubleTap');
}}
onLongTap={() => {
Toast.show('longTap');
}}
onSwipe={(e) => {
console.log('swipe', e.direction);
}}
>
<div
style={{
width: 120,
height: 120,
border: '1px solid red',
position: 'relative',
}}
/>
</TouchElement>
);
}