touch事件
当我们手指触摸屏幕的时候,touch事件有这几个事件:touchstart : 当手指触摸手机屏幕的时候触发 touchmove : 当手指当手机屏幕上移动的时候触发 touchend: 当手指移开手机屏幕的时候触发 ,事件方法应该在touchend
中定义调用。touchcancel: 这个事件在 uc 浏览器上,当我们在页面上进行左右滑动的时候会被触发 ,用于防止误操作
touch 事件对象
touch事件对象返回了下面几个属性: touches: 当前屏幕上所有触摸点的集合 ,当只有一个触摸点的时候,使用 touches[0] 获得触摸对象targetTouches: 当前对象上所有触摸点的集合 changedTouched: 自从变化之后的所有touch对象数组touch 事件返回的对象中的属性集合
返回的触摸点对象如下:1 | TouchList { |
在uc浏览器下遇到的问题
使用uc浏览器的时候遇到了一个问题,我想要做导航栏随着手指移动而滑动的效果,在android 系统上chrome浏览器表现正常,但是在uc浏览器上出现bug, 手指滑动屏幕的时候导航栏不滑动,当手指离开的时候,导航栏出现滑动效果,貌似滑动效果只被触发了一次,touchend 事件消失,被touchcancel替代:解决办法: 在touchmove的时候阻止默认行为,1 | touch(event) { |
touchcancel
的行为并不是类似于 touchend
touchcancel 事件
touchcancel
从字面意思上来讲,是取消touch
操作的意思,在 MDN 上是这样解释的: The我是这样理解的:touchcancel
event is fired when a touch point has been disrupted in an implementation-specific manner (for example, too many touch points are created).\touchcancel
事件是这样被触发的:当触摸点被一种特殊的执行方法被破坏,(例如,创建了太多的触摸点)
touchcancel
事件被触发是因为:当我们使用手机操作的时候,例如点击按钮操作,我们在 touchend
事件中定义了点击按钮后调用的方法,如果我们误操作,比如手指在按钮上左右滑动的时候,touchcancel
事件就会被紧跟着被调用(不同于点击事件,浏览器会认为在手机屏幕上的左右滑动是误操作),取消 touchend
事件,从touchend
事件中的方法不会被执行。当手指在按钮上下滑动的时候,touchcancel
事件是不会被调用的。可以把touchcancel
事件视为防止误操作事件。