移动web开发之touch事件实例详解(3)
2、使用缓动动画,增加300ms的过渡效果,注意display属性无法使用transition
3、加入中间层的dom元素,让中间层接受这个穿透事件,稍后隐藏
4、上下两级都使用tap事件,但默认行为不可避免
5、在document上的touchstart事件,阻止默认行为。
document.addEventListener('touchstart',function(e){ e.preventDefault(); })
接着,添加a标签的跳转行为
a.addEventListener('touchstart',function(){ window.location.href = 'https://cnblogs.com'; })
但是,这种方法有副作用,会造成页面无法滚动、文本无法选中等。如果在某个元素上,需要恢复文本选中的行为,则可以使用阻止冒泡来恢复
el.addEventListener('touchstart',function(e){ e.stopPropagation(); })
事件对象
【基础信息】
每个触摸事件的event对象都提供了在鼠标事件中常见的属性,包括事件类型、事件目标对象、事件冒泡、事件流、默认行为等
以touchstart为例,示例代码如下
<script> (function () { var elesMap = { touchObj: document.getElementById('test') }, onTouch; onTouch = function (e) { console.log(e) }; elesMap.touchObj.addEventListener('touchstart', function (event) { onTouch(event); }); })(); </script>
1、currentTarget属性返回事件正在执行的监听函数所绑定的节点
2、target属性返回事件的实际目标节点
3、srcElement属性与target属性功能一致
//当前目标 currentTarget:[object HTMLDivElement] //实际目标 target:[object HTMLDivElement] //实际目标 srcElement:[object HTMLDivElement]
4、eventPhase属性返回一个整数值,表示事件目前所处的事件流阶段。0表示事件没有发生,1表示捕获阶段,2表示目标阶段,3表示冒泡阶段
5、bubbles属性返回一个布尔值,表示当前事件是否会冒泡。该属性为只读属性
6、cancelable属性返回一个布尔值,表示事件是否可以取消。该属性为只读属性
//事件流 eventPhase: 2 //可冒泡 bubbles: true //默认事件可取消 cancelable: true
【touchList】
除了常见的DOM属性外,触摸事件对象有一个touchList数组属性,其中包含了每个触摸点的信息。如果用户使用四个手指触摸屏幕,这个数组就会有四个元素。一共有三个这样的数组
1、touches:当前触摸屏幕的触摸点数组(至少有一个触摸在事件目标元素上)
2、changedTouches :导致触摸事件被触发的触摸点数组