一、手机触屏事件
1、各种事件
touchstart
当手指触摸到屏幕时触发
touchmove
手指在屏幕上移动时触发
touchend
手指离开屏幕时触发
touchenter
当触点进入某个 element 时触发。
touchleave
当触点离开某个 element 时触发。
touchcancel
当触点由于某些原因被中断时触发。有几种可能的原因如下(具体的原因根据不同的设备和浏览器有所不同):
由于某个事件取消了触摸:例如触摸过程被一个模态的弹出框打断。
触点离开了文档窗口,而进入了浏览器的界面元素、插件或者其他外部内容区域。
当用户产生的触点个数超过了设备支持的个数,从而导致 TouchList 中最早的 Touch 对象被取消。

2、在触屏时候产生的各种值
touches 当前位于手机屏幕上的所有手指列表
targetTouches 位于当前的元素上的手指的一个列表
changedTouches 涉及当前事件的手指列表
clientX:触摸目标在视口中的x坐标。
clientY:触摸目标在视口中的y坐标。
identifier:标识触摸的唯一ID。
 pageX:触摸目标在页面中的x坐标。
 pageY:触摸目标在页面中的y坐标。
 screenX:触摸目标在屏幕中的x坐标。
 screenY:触摸目标在屏幕中的y坐标。
 target:触目的DOM节点目标。

下面是一个触屏滑动图片的实例

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus®">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <meta name="viewport" content="width=640,target-densitydpi=device-dpi,user-scalable=no">    //实现在移动端能到运行的前提
  <title>Document</title>
 </head>
 <style>
 	*{margin:0;padding:0}
	html,body{width:100%;height:100%;overflow:hidden;}   //一定要用overflow:hidden;  否则原来盒子就是默认可以滑动的
	#div{
		width:2560px;
		height:400px;
		position:relative;
		left:0;
	}
	img{float:left;}
	#icon{
		width:200px;
		height:25px;
		margin:10px auto;
	}
	i{
		display:block;
		width:25px;
		height:25px;
		border-radius:50%;
		border:1px solid red;
		float:left;
		margin-right:23px;
	}
	.curr{background:red;}
 </style>
 <body>
	<div id="div">
		<a href="http://www.baidu.com"><img src="img/1.jpg" width="640" height="400"></a>
		<a href="http://www.baidu.com"><img src="img/2.jpg" width="640" height="400"></a>
		<a href="http://www.baidu.com"><img src="img/3.jpg" width="640" height="400"></a>
		<a href="http://www.baidu.com"><img src="img/4.jpg" width="640" height="400"></a>
	</div>
	<div id="icon">
			<i class="curr"></i>
			<i></i>
			<i></i>
			<i></i>
		</div>
 </body>
<script>
		var div = document.getElementById("div");
		var icons = document.getElementById("icon").children;      //直接获取到它的儿子,和下面的代码作用一样
		//var iS = icon.getElementsByTagName("i");
		var x=0;
		var startX = 0;//div的初始坐标
		var scroll = 0;//拖动的距离
		document.addEventListener("touchstart",function(e){    //触屏开始
			x = e.changedTouches[0].pageX;                //获取到当前手指的位置
			startX = scroll;                                              //这里是当触屏结束再次触屏时候,这时候上一次触屏所拉动后的位置就是这次拉动的起点
		})
		div.addEventListener("touchmove",function(e){           //触屏移动中
			var xL = e.changedTouches[0].pageX - x;              // xL 代表滑动了多少距离,用滑动后的位置减去滑动开始的位置
			scroll = startX + xL;                                                 //在把滑动的距离+滑动开始的位置 就是已经滑动了多少
			this.style.left = scroll +"px";                                                              
			//console.log(scroll);
		})
		div.addEventListener("touchend",function(e){      //触屏结束
			var xL = e.changedTouches[0].pageX - x;  
			scroll = startX + xL;
			var n = -scroll/640;                                      // 求出当前从一开始(第一张)滑动到现在(不算中间滑动了多少次) 占整体整个盒子的比例
			//n%1  1.3%1 = 0.5 
			n = n%1<0.3?Math.floor(n):Math.ceil(n);       //如果小求余小于0.3 如1.2 ,2.2 ,3.2.。。这些数值分别代表第二张滑动了占现在视口上的0.2  第三张滑动了占现在视口上的0.2   第四张滑动了占现在视口上的0.2  这样当拉超过整个画面0.3的时候,就可以直接滑动到下一页,否则又弹回本页面
			if (n<0)
			{
				n = 0
			}else if (n>3)
			{
				n = 3;
			}
			scroll = -n*640;  
			this.style.left = scroll+"px";
			for ( var i=0;i<icons.length; i++)    //这里是实现如果当前照片n值(其实就相当于序列号) 不和现在的循环中的 i (其实也相当于序列号)相同 ,那么就清         空class
 					{
					if (i != n)
					{
						icons[i].className="";
					}else
					{
						icons[i].className="curr";
					}
				}
			this.style.transition = "0.5 linear";
			})
			</script>
			</html>

最后了解以下标签内的 date自定义值属性
设置属性方法:
div-dataset-name = “值” //name 这个名字可以随意改变是自定义的
div-dataset-name1-name2 = “值” //name 这个名字可以随意改变是自定义的
在js中获取到这些自定义值的方法如下面实例,可以弹出自定义里面的值

<div id="div" data-aaa="努力学习" data-aaa-bbb="好好学习天天向上">
	</div>
	alert(div.dataset.aaa);   
	alert(div.dataset.aaaBbb);