canvas教程

HTML5的javascript touch事件

字号+ 作者:H5之家 来源:H5之家 2017-09-12 08:07 我要评论( )

HTML5的javascript touch事件

 

以下是几种普及得比较好的触摸事件,可以在绝大多数现代浏览器中来测试这一事件(必须是触屏设备):

(on)touchstart:触摸开始的时候触发

(on)touchmove:手指在屏幕上滑动的时候触发

(on)touchend:触摸结束的时候触发

(on)touchcancel:系统取消touch事件的时候触发。例如电话接入或者弹出信息。一般用在游戏:玩着的时候,突然来电话了,就触发touchcancel事件暂停游戏、存档等操作。

 

而每个触摸事件都包括了三个触摸对象列表,每个列表里包含了对应的一系列触摸点(触摸对象,用来实现多点触控):

touches:当前位于屏幕上的所有手指的列表。

targetTouches:位于当前DOM元素上手指的列表。

changedTouches:涉及当前事件手指的列表。

 

每个触摸点由包含了如下触摸信息(常用):

identifier:一个数值,touch对象的unique ID ,唯一标识触摸会话(touch session)中的当前手指。一般为从0开始的流水号(android4.1,uc)

target:DOM元素,是动作所针对的目标。

client / clientY:触摸点相对于浏览器窗口viewport的位置,不包含滚动距离

pageX / pageY:触摸点相对于页面的位置,包含滚动距离

screenX /screenY:触摸点相对于屏幕的位置

radiusX/radiusY/rotationAngle:画出大约相当于手指形状的椭圆形,分别为椭圆形的两个半径和旋转角度。初步测试浏览器不支持,好在功能不常用。

有了这些信息,就可以依据这些事件信息为用户提供不同的反馈了。

 

 Touch事件与Mouse事件的出发关系

在触屏操作后,手指提起的一刹那(即发生touchend后),系统会判断接收到事件的element的内容是否被改变,

如果内容被改变,会解析为touch事件,接下来的click事件都不会触发,

如果内容没有改变,则会解析为click事件,按照mousedown,mouseup,click的顺序触发事件。

特别需要提到的是,在解析为click事件时,只有再触发一个触屏事件时,才会触发上一个事件的mouseout事件。

因此有关于hover的小技巧,当点击过一个按钮之后,这个按钮就会一直处于hover的状态,此时基于这个伪类所设置的css也是起作用的,直到用手指点击另外一个地方,才会完成mouseout事件。

 

gesture事件(手势事件)

与touch事件相近,也用得很多的是gesture事件,这个事件将在下一篇讲到。

 

touch事件demo

 

<meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=0">

<div id="canvas">

 <div id="move"></div>

 </div>

<style>

 *{margin:0;padding:0;}

 html,body{ width:100%;height:100%;}

 #canvas{position:relative;width:100%;height:100%;}

 #move{position:absolute;width:100px;height:100px;background:#0F0;}

 .spirit {position:absolute;width:50px;height:50px;background-color:red;}

 </style>

<script>

 var canvas = document.getElementById("canvas");

 var spirit, startX, startY;

 var a = 1;

 // touch start listener

 function touchStart(event) {

 event.preventDefault();

 if (spirit ||! event.touches.length) return;

 var touch = event.touches[0];

 startX = touch.pageX;

 startY = touch.pageY;

 spirit = document.createElement("div");

 spirit.className = "spirit";

 spirit.style.left = startX - 50 + "px";

 spirit.style.top = startY - 50 + "px";

 canvas.appendChild(spirit);

 spirit.innerHTML = a++;

 }

 // touch move listener

 function touchMove(event) {

 event.preventDefault();

 if (!spirit || !event.touches.length) return;

 var touch = event.touches[0];

 //spirit.style.left = touch.pageX - 50 + "px";

 //spirit.style.top = touch.pageY - 50 + "px";

 //或者用下面的

 var x = touch.pageX - startX;

 var y = touch.pageY - startY;

 spirit.style.webkitTransform = 'translate(' + x + 'px, ' + y + 'px)';

 }

 // touch end listener

 function touchEnd(event) {

 if (!spirit) return;

 canvas.removeChild(spirit);

 spirit = null;

 }

 // add touch start listener

 canvas.addEventListener("touchstart", touchStart, false);

 canvas.addEventListener("touchmove", touchMove, false);

 canvas.addEventListener("touchend", touchEnd, false);

 </script>


标签: h5

顶一下

(0)

0%

踩一下

(0)

0%

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Canvas与Image互相转换示例代码_html5教程技巧

    Canvas与Image互相转换示例代码_html5教程技巧

    2017-09-11 14:25

  • Array 对象

    Array 对象

    2017-09-11 12:10

  • javascript学习记录——canvas元素的基本操作

    javascript学习记录——canvas元素的基本操作

    2017-09-11 08:00

  • HTML5 Canvas(画布)教程 图像处理(转)

    HTML5 Canvas(画布)教程 图像处理(转)

    2017-09-09 11:09

网友点评
.