这里我们介绍几种普及得比较好的触摸事件,你可以在绝大多数现代浏览器中来测试这一事件(必须是触屏设备哦):
touchstart:触摸开始的时候触发
touchmove:手指在屏幕上滑动的时候触发
touchend:触摸结束的时候触发
touchcancel:事件:当系统停止跟踪触摸的时候触发。关于这个事件的确切出发时间,文档中并没有具体说明,咱们只能去猜测了。
而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点(用来实现多点触控):
touches:当前位于屏幕上的所有手指的列表。
targetTouches:位于当前DOM元素上手指的列表。
changedTouches:涉及当前事件手指的列表。
每个触摸点由包含了如下触摸信息(常用):
identifier:一个数值,唯一标识触摸会话(touch session)中的当前手指。一般为从0开始的流水号(android4.1,uc)
target:DOM元素,是动作所针对的目标。
pageX
/pageX
/clientX
/clientY/screenX/screenY
:一个数值,动作在屏幕上发生的位置(page包含滚动距离,client不包含滚动距离,screen则以屏幕为基准)。
radiusX
/radiusY/
rotationAngle:画出大约相当于手指形状的椭圆形,分别为椭圆形的两个半径和旋转角度。初步测试浏览器不支持
/*单指拖动*/ var obj = document.getElementById('id'); obj.addEventListener('touchmove', function(event) { // 如果这个元素的位置内只有一个手指的话 if (event.targetTouches.length == 1) { event.preventDefault();// 阻止浏览器默认事件,重要 var touch = event.targetTouches[0]; // 把元素放在手指所在的位置 obj.style.left = touch.pageX-50 + 'px'; obj.style.top = touch.pageY-50 + 'px'; } }, false);
事件组合
网站中具体使用
<div>初始:<input type="text" id="csid" />移动:<input type="text" id="ydid" />结束:<input type="text" id="jsid" /></div>
<div style="width: 100%;height: 200px;background-color: red" id="mouid">
afadfasfsadas<br/>afadfasfsadas<br/>afadfasfsadas<br/>afadfasfsadas<br/>
</div>
<input id="djceshi" type="button" value="4588" />
<script type="text/javascript">
//判断平台
function IsPC()
{
var userAgentInfo = navigator.userAgent;
var Agents = new Array("Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod");
var flag = true;
for (var v = 0; v < Agents.length; v++) {
if (userAgentInfo.indexOf(Agents[v]) > 0) { flag = false; break; }
}
return flag;
}
//不同终端使用不同监听
var touchEvents = {
touchstart: "touchstart",
touchmove: "touchmove",
touchend: "touchend",
/**
* @desc:判断是否pc设备,若是pc,需要更改touch事件为鼠标事件,否则默认触摸事件
*/
initTouchEvents: function () {
if (IsPC()) {
this.touchstart = "mousedown";
this.touchmove = "mousemove";
this.touchend = "mouseup";
}
}
};
touchEvents.initTouchEvents();
//移动端屏蔽pc端的事件。pc端屏蔽移动端的事件
document.addEventListener(touchEvents.touchstart, function (event) {
event.preventDefault();
});
document.addEventListener(touchEvents.touchmove, function (event) {
event.preventDefault();
});
document.addEventListener(touchEvents.touchend, function (event) {
event.preventDefault();
});
//具体使用案例
document.getElementById("mouid").addEventListener(touchEvents.touchstart,function(event){
if(touchEvents.touchstart=="touchstart")
{
if(event.targetTouches.length==1)
{ event.preventDefault();// 阻止浏览器默认事件,重要
var touch = event.targetTouches[0];
document.getElementById("csid").value=touch.pageX;
}
}
});
document.getElementById("mouid").addEventListener(touchEvents.touchmove,function(event)
{
if(touchEvents.touchstart=="touchstart")
{
if(event.targetTouches.length==1)
{ event.preventDefault();// 阻止浏览器默认事件,重要
var touch = event.targetTouches[0];
document.getElementById("ydid").value=touch.pageX;
}
}
});
//结束触屏的事件,此事件中 event.targetTouches.length 为0因为手指结束触屏
document.getElementById("mouid").addEventListener(touchEvents.touchend,function(event)
{
document.getElementById("jsid").value="结束";
});
document.getElementById("djceshi").addEventListener(touchEvents.touchend,function(event)
{
document.getElementById("jsid").value="点击";
});