说在最前面,本文是一个系列文章的开头, 这个系列里我会讲如何用typescript开发一款支持pc和手机端的手势库any-touch, 以及经过jest让你的代码测试覆盖率100%.前端
用 TypeScript 开发手势库 - (2)web开发经常使用手势有哪些?git
用 TypeScript 开发手势库 - (3)统一化Mouse和Touch事件github
不到30行, 用any-touch实现一个drawerweb
今天的文章里咱们先不讲代码, 咱们讲一下都有哪些手势以及手势的逻辑, 理解了逻辑再写代码就简单了.typescript
回到正题, 常见的手势有: tap(点击) \ press(按住) \ 拖拽(pan) \ 划过(swipe) \ 捏合缩放(pinch) \ 旋转(rotate), 全部的手势在移动端其实都是经过touch事件的不一样触发时机而区分出的(pc端是mouseup/mousemove/mousedown, 关于如何经过鼠标识别手势, 后面的文章会有单独的章节).post
这里有个demo, 我把全部的手势识别放在了里面.测试
众所周知, 移动端的click有300ms延迟(浏览器延迟300ms为了识别双击操做, 由于移动端浏览器默认双击能够缩放页面), 为了不"点击穿透"咱们建立了tap事件, 同时经过preventDefault来禁止click触发. tap在touchend阶段触发, 说下识别tap的必要条件:cdn
2次连续的tap(单击)触发双击, 双击的原理以下: 每次tap后并不触发tap, 而是等待300ms看是否有双击触发, 若是没有那么2次tap依次触发, 不然触发双击,单击不触发. (关于多击更细的原理, 后面我会单独经过源码解析), 必要条件:
按住屏幕不放, 一段时间后触发press时间,触发press后, 离开触点, 触发pressup事件, 识别的必要条件以下:
(1指或多指)按住屏幕不离开, 每一次移动都会触发pan. 举几个例子:
(1指或多指)按住屏幕快速滑动, 当手指离开屏幕的一瞬间, 触发swipe. 必要条件以下:
2指及以上按住屏幕, 让2个手指之间的距离发生变化, 经过距离的变化来表示pinch是放大开始缩小. 常见于gallery组件, 用来放大/缩小图片.
2指及以上按住屏幕, 经过2指链接造成的直线和坐标系的x轴的夹角的变化而触发rotate. 经常使用于图片处理, 用来旋转图片.
上面关于手势识别的具体逻辑能够看个人仓库, 地址: github.com/any86/any-t…
本次先讲这么多, 后面的文章具体要讲什么看你们的回复想听什么, 期待你们的回复, 本人热爱前端, 但能力有限, 有讲的不对的请你们多多指点.
当A/B两个层上下z轴重叠,上层的A点击后消失或移开,而且B元素自己有默认click事件(如a标签)或绑定了click事件。在这种状况下,点击A/B重叠的部分,就会出现点透的现象.