any-touch一个手势库, 支持PC / 手机端 (原创)

所属分类:UI,其他-悬停,独立的部件

 19079  219  查看评论 (4)
分享到微信朋友圈
X
any-touch一个手势库, 支持PC / 手机端 (原创) ie兼容12

更新时间:2019-12-01 23:27:42

any-touch

一个基于typescript实现的手势库.

  •  支持更多设备: PC端 / 移动端 / 微信小程序.

  •  支持手势更全面: tap(点击) / press(按) / pan(拖拽) / swipe(划) / pinch(捏合) / rotate(旋转) 6大类手势.

  •  更简单: 支持 vue指令.

  •  更放心: 代码测试覆盖率100%.

安装

npm i -S any-touch

CDN

https://unpkg.com/any-touch/dist/any-touch.min.js
// vue指令插件
https://unpkg.com/any-touch/dist/any-touch.v-touch.min.js

快速开始

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

更多手势

根据手势的运动方向和状态我们还支持panstart / panup / pinchin / pinchout / pressup等更多的手势事件.

// 旋转中触发
at.on('roatemove', ev=>{});

支持微信小程序

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

<view @touchstart="touchstartHandler" @touchmove="touchmoveHandler" @touchend="touchendHandler"></view>
const at = new AnyTouch()
{ 
    onload(){
        at.on('pinch', ev=>{
            // 缩放
        });
    },
    
    methods: {
      touchstartHandler(ev){
        at.catchEvent(ev);
      },
      touchmoveHandler(ev){
        at.catchEvent(ev);
      },
      touchendHandler(ev){
        at.catchEvent(ev);
      }
    }
}

支持vue指令

import vTouch from 'any-touch/dist/v-touch.common'
Vue.use(vTouch);
<!-- xxx.vue -->
<div
  v-touch
  @tap="tap"
  @doubletap="doubletap"
  @press="press"
  @pan="pan"
  @pinch="pinch"
  @rotate="rotate"
  @click="click"
>hello v-touch</div>

此时div上可以通过v-on进行手势的绑定,和绑定 click 等原生事件一样.

 v-touch 高级设置

我们可以通过v-touch导入AnyTouch的实例, 然后进行高级设置.

<!-- xxx.vue -->
<div v-touch="importAT" @tap="tap">touch</div>
export default {
  methods: {
    importAT(at) {
      const doubletap = at.get("doubletap");
      // 开启双击
      doubletap.disabled = false;
    }
  }
};

参数说明

名称类型默认值简要说明
touchActionString'compute'对应css的touch-action属性
hasDomEventsBooleantrue是否派发手势名对应的原生事件
isPreventDefaultBooleantrue是否阻止默认事件
preventDefaultExcludeRegExp | ((ev: SupportEvent) => boolean)/^(INPUT|TEXTAREA|BUTTON|SELECT)$/符合条件可不阻止默认事件的触发
syncToAttrBooleantrue是否在元素上的at-gesture属性赋值当前手势名
cssPreventObject{selectText: true,drag: true, tapHighlight: true, callout: true}是否开启上述禁止浏览器默认事件的css属性

不要用alert调试

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

如果仅仅是了在移动端调试, 请使用腾讯的vconsole

常见问题

为什么"双击"默认是关闭的?

因为"双击"的识别需要让"单击"等待他的"第二下单击", 如果没有"第二下单击", 那么"单击"触发, 否则识别为"双击".

基于上面的逻辑, 如果默认开启了"双击", 那么没有"双击"需求的人用的时候就会觉得"单击"反应慢(因为再等双击), 出于对"大多数人没有双击需求"的考虑, 默认"双击"是关闭状态.

开启方式:

const at = new AnyTouch(el);
const doubletap = at.get("doubletap");
// 开启双击
doubletap.disabled = false;
相关插件-悬停,独立的部件

60种css3鼠标悬停效果

一款使用的效果,数遍悬停会出现相应图片的简介
  悬停
 57890  928

9种CSS3 blend模式制作的鼠标滑过图片标题特效

9种CSS3 blend模式制作的鼠标滑过图片标题特效
  悬停
 29547  436

JS超酷图片翻动展示效果

JS超酷图片翻动展示效果
  悬停
 35373  587

常用鼠标经过遮罩层动画效果

常用鼠标经过遮罩层动画效果,点击弹窗动画效果
  悬停
 33271  381

讨论这个项目(4)回答他人问题或分享插件使用方法奖励jQ币 评论用户自律公约

    一心只有学习 0
    2023/8/7 15:25:05
    找不到模块“any-touch/dist/v-touch.common”或其相应的类型声明。 回复
    à sa guise 0
    2020/8/21 14:50:20
    这个我在平板上打开为什么不行,就只有一个页面,在电脑和手机上打开都是正常的
        中中0
        2023/5/22 22:50:56
        因为,介绍里写的是pc和手机。。。
    回复
    天道酬勤 0
    2019/12/2 14:58:49
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
😃
  • 😀
  • 😉
  • 😥
  • 😵
  • 😫
  • 😘
  • 😡
  • 👍
  • 🌹
  • 👏
  • 🍺
  • 🍉
  • 🌙
  • 💖
  • 💔
取消回复