首页 > 科技 > 一个手势库,支持微信小程序 / 鼠标 / touch / vue

一个手势库,支持微信小程序 / 鼠标 / touch / vue


any-touch

一个手势库, 支持微信小程序 / 鼠标 / touch / vue

安装

npm i -S any-touch

CDN

unpkg.com/any-touch/dist/AnyTouch.umd.min.js

快速开始

import AnyTouch from "any-touch";
const el = doucument.getElementById("box");
const at = new AnyTouch(el);
// 单击
at.on("tap", ev => {
// 阻止默认事件触发, 比如click
ev.preventDefault();
});

支持哪些手势?

tap(点击)

还支持: doubletap(双击), 以及可以自定义任意多击.

press(按)

还支持: pressup(按后松手)

pan(拖拽)

还支持衍生事件: panstart(拖拽开始)/panmove(拖拽中)/panend(拖拽结束)/panleft(向左拖拽)/panright/panup/pandown

pinch(缩放)

还支持: pinchstart(缩放开始)/pinchmovet(缩放中)/pinchend(缩放结束)/pinchin(缩小)/pinchout(放大)

rotate(旋转)

还支持: rotatestart(旋转开始)/rotatemove(旋转中)/rotateend(旋转结束)

事件对象(ev)

名称数据类型说明

typeString事件名, 如 tap/pan 等

eventTypeString事件类型: start

xNumber当前触点中心x坐标

yNumber当前触点中心y 坐标

deltaXNumber当前触点和前触点的 x 轴偏移距离

deltaYNumber当前触点和前触点的 y 轴偏移距离

deltaXYAngleNumber当前触点相对前触点的角度变化(相对于 x 轴)

displacementXNumber当前触点与起始触点的 x 位移(矢量)

displacementYNumber当前触点与起始触点的 y 位移(矢量)

distanceXNumberdisplacementX 的绝对值

distanceYNumberdisplacementY 的绝对值

distanceNumber当前触点与起始触点的距离(标量)

deltaTimeNumber当前时间与起始时间的差值

velocityXNumber当前 x 速度, 每 25ms 进行一次刷新

velocityYNumber当前 y 速度, 每 25ms 进行一次刷新

directionNumber前触点与当前触点的方向, 可以理解为瞬时方向, 每 25ms 进行一次刷新

overallDirectionString是否当前识别周期的开始

angleNumber多点触摸时, 起始触点与当前触点的旋转角度

deltaAngleNumber多点触摸时, 前触点与当前触点的旋转角度

scaleNumber多点触摸时, 起始触点与当前触点的缩放比例

deltaScaleNumber多点触摸时, 前触点与当前触点的缩放比例

maxPointLengthNumber本轮识别周期出现过的最大触点数

isStartBoolean是否当前识别周期的开始

isEndBoolean是否当前识别周期的结束

targetEventTarget绑定事件的元素

currentTargetEventTarget实际触发绑定事件的元素

timestampNumber当前时间

nativeEventTouchEventMouseEvent`

支持微信小程序

由于微信小程序中没有 dom 元素的概念, 所以我们需要通过useEvent方法手动接收 touch 事件的事件对象来进行识别!


const at = new AnyTouch();
{
onload(){
at.on('pan', ev=>{
// 拖拽
});
},
methods:{
touchstartHandler(ev){
at.useEvent(ev);
},
touchmoveHandler(ev){
at.useEvent(ev);
},
touchendHandler(ev){
at.useEvent(ev);
}
}
}

支持vue指令

AnyTouch上的vTouch是一个vue指令, 初始化后可以在元素上添加v-touch进行绑定.

// main.js
Vue.use(AnyTouch.vTouch);

@tap="tap"
@doubletap="doubletap"
@press="press"
@pan="pan"
@pinch="pinch"
@rotate="rotate"
@click="click">touch

此时div上可以通过v-on进行手势的绑定,和绑定click等原生事件一样. 通过v-touch我们还可以导出AnyTouch的实例.

识别器

识别器就是识别如下手势的代码逻辑: 点击(tap) | 拖拽(pan) | 划(swipe) | 捏合缩放(pinch) | 旋转(rotate).

requireFailure

如果你需要某 2 个手势的触发条件是互斥的, 那么就需要通过 requireFailure 来标记他们, 当一个"识别失败"另一个才能触发, 如单击和双击就是互斥关系的 2 个手势.

不要用alert调试

在安卓手机的真机上, 如果touchstart或touchmove阶段触发了alert, 会出现后续的touchmove/touchend不触发的bug. 所以请大家务必避免在手势的事件回调中使用alert.

开源地址:

https://github.com/any86/any-touch

更多更优质的资讯,请关注我,你的支持会鼓励我不断分享更多更好的优质文章。

本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.souzhinan.com/kj/110989.html