Introduction
最近刚入坑web前端,学了一点基础,便准备写个简单的2048小游戏试试手。开发过程中发现,
PC端可以直接监听键盘输入,但是移动端就不得不监听屏幕上的滑动事件了。
- 现有的js库中没有可以直接满足上述要求的封装
- 在JQuery Mobile 中 可以通过 .on 的方式监听左右滑动事件,但是没有上下滑动事件(而且我想写一个PC端和移动端都通用的网页的话,就必须引入Jquery,同时引入Jquery和Jquery Mobile 使得Bootstrap中的按钮样式改变了,这显然不是想要的结果)
- 所以为了保持PC端和移动端的一致性,决定直接封装一下js的移动端的触摸事件,实现上述需求
2048
可以在手机上打开,仍然具有不错的交互
JS 触摸事件(event)
event的类型
- touchstart: 当手指触摸屏幕时触发(相当于Android中的ACTION_DOWN事件)
- touchmove: 当手指在屏幕上滑动时连续触发(相当于Android中的ACTION_MOVE事件)— 期间调用preventDefault()可以屏蔽事件的默认行为,达到阻止滚动的效果
- touchend: 当手指从屏幕上移开时触发(相当与Android中的ACTION_UP)
- touchcancel: 当系统停止跟踪触摸时触发。关于此事件的触发时机,文档中没有明确说明(我们在接下来的过程中也用不到)
event用于跟踪触摸的属性
- touches: 表示当前跟踪的触摸操作的Touch对象的数组
- targetTouches: 特定于事件目标的Touch对象数组
- changeTouches: 表示子上次触摸以来发生了什么改变的Touch对象的数组
注意: 在touchend事件发生时,event的touches对象中就没有元素了,需要到changeTouches中去获取触摸离开时的位置信息
Touch对象包含的数组
- clentX: 触摸目标在窗口中的x坐标
- clientY: 触摸目标在窗口中的y坐标
- identifier: 标识触摸的唯一ID
- pageX: 触摸目标在页面中的x坐标
- pageY: 触摸目标在页面中的y坐标
- screenX: 触摸目标在屏幕中的x坐标
- screenY: 触摸目标在屏幕中的y坐标
- target:触摸的DOM节点目标
封装一个操作对象
该对象的封装,前两个函数参考书籍《JavaScript 高级程序设计》(第三版)
1 | var EventUtil = { |