触屏

标准的触屏事件有以下几种:

  • touchstart:当手指碰到屏幕的时候触发
  • touchmove:当手指在屏幕滑动时触发
  • touchend:当手指离开屏幕时触发
  • touchcancel:当一次触摸事件被中断时触发

触屏事件对象包含的一些常用属性:

  • touches:记录当前触屏关键点的数组
  • changedTouches:记录touches变化后关键点的数组

每一个touch点包含ClientXClientYPageXPageYidentifiertarget

事件图解

touchstart

假设现在有一个手指在碰到屏幕上,则会生成一个touches数组,而这个数组里面只包含一个元素,是一个对象,这个对象包含了这个触摸点一些信息。

touchstart

touchmove

当一个触摸点在屏幕上移动时,现在则会生成一个changedTouches数组,这个数组是一个触摸点对象,对象包含了这个触摸点在移动过程中的一些信息。

touchmove

touchend

手指离开屏幕时,该事件触发,触摸点消失。

touchend

just do it !

有了上面的基础知识,现在就让我们做一个简单的触屏拖拽效果吧!

其实触屏上的拖拽和电脑上的差不多,只不过是事件变一下,可以简单的理解成这样:

鼠标事件 触屏事件
mousedown touchstart
mousemove touchmove
mouseup touchend

如果在看到这个表格之前还感觉无从下手的话,那么现在应该不会了。

首先在HTML中创建一个DIV:

	<div id="test">
		
	</div>

接下来给这个DIV添加触屏事件:

oDiv.addEventListener("touchstart",function(e){ //对DIV添加touchstart事件
				var th = e.touches[0],  //保存该触摸点
					disX = th.pageX - this.offsetLeft,  //记录事件点与元素间的距离
					disY = th.pageY - this.offsetTop,
					_target = this;

				document.addEventListener("touchmove",move,false);//对DIV添加touchmove事件
				document.addEventListener("touchend",up,false);//对DIV添加touchend事件

				function move(e){
					e.preventDefault(); 
					var thd = e.changedTouches[0], //保存移动时的触摸点
						left = thd.pageX - disX,
						top = thd.pageY - disY;
					_target.style.left = left + "px";  //改变DIV的位置
					_target.style.top = top + "px";
					console.log(thd);
				}

				function up(e){
					this.removeEventListener("touchmove",move,false);
					this.removeEventListener("touchend",up,false);
				}

			},false);

这段代码添加以后,在触屏设备上就可以拖拽这个DIV了,您可以点击这里查看 Demo ,也可以用手机扫描二维码进行访问:

2204698

没有触屏设备,怎么办呢?其实在电脑上使用Chrome也是可以模拟触屏设备的。
在Chrome中F12后,点击右下角的设置:

settings

然后在 Overrides选项中找到Emulate touch events 勾选上:

settings1

这时再看见面上的鼠标,已经变成了一个圆点:

settings2

现在就可以在不是触摸屏的电脑上模拟触屏事件了!

初探~~

这篇文章只是对触屏事件进行一个简单的介绍而已,以后研究深入会继续记录下来,文章如有错误,请指出,谢谢!