触摸事件

只有触摸屏才会引发这一类事件

触摸事件 和 鼠标事件 同时触发,即使这个时候并没有用到鼠标。

这是为了让那些只定义鼠标事件、没有定义触摸事件的代码,在触摸屏的情况下仍然能用。

如果想避免这种情况,可以用 event.preventDefault 方法阻止发出鼠标事件

Touch            一个触摸点

TouchList            多个触摸点的集合

TouchEvent            触摸引发的事件实例

  • var touch = new Touch(touchOptions)
  • 配置对象可选值

identifier        必需        整数        触摸点的唯一 ID
target        必需        元素节点        触摸点开始时所在的网页元素
clientX        可选        数值        触摸点相对于浏览器窗口左上角的水平距离,默认为0。
clientY        可选        数值        触摸点相对于浏览器窗口左上角的垂直距离,默认为0。
screenX        可选        数值        触摸点相对于屏幕左上角的水平距离,默认为0。
screenY        可选        数值        触摸点相对于屏幕左上角的垂直距离,默认为0。
pageX        可选        数值        触摸点相对于网页左上角的水平位置(即包括页面的滚动距离),默认为0。
pageY        可选        数值        触摸点相对于网页左上角的垂直位置(即包括页面的滚动距离),默认为0。
radiusX        可选        数值        触摸点周围受到影响的椭圆范围的 X 轴半径,默认为0。
radiusY        可选        数值        触摸点周围受到影响的椭圆范围的 Y 轴半径,默认为0。
rotationAngle        可选        数值        触摸区域的椭圆的旋转角度,单位为度数,在0到90度之间,默认值为0。
force        可选        数值        范围在0到1之间        表示触摸压力        0代表没有压力,1代表硬件所能识别的最大压力,默认为 0

  • Touch 接口的实例属性        var touch = e.changedTouches.item(0);

touch.identifier 

返回一个整数,表示触摸点的唯一 ID。

这个值在整个触摸过程保持不变,直到触摸事件结束。

touch.force

返回一个0到1之间的数值,表示触摸压力。

0代表没有压力,1代表硬件所能识别的最大压力。

touch.target

返回一个元素节点,代表触摸发生时所在的那个元素节点。

即使触摸点已经离开了这个节点,该属性依然不变。

touch.screenX,touch.screenY       

相当于屏幕左上角

touch.clientX,touch.clientY       

相当于浏览器窗口左上角

touch.pageX,touch.pageY

相当于整个网页左上角

touch.radiusX,touch.radiusY

返回触摸点周围受到影响的椭圆范围的 X 轴半径和 Y 轴半径,单位为像素。

乘以 2 就可以得到触摸范围的宽度和高度

touch.rotationAngle

表示触摸区域的椭圆的旋转角度,单位为度数,在0到90度之间

  • 精准描述 手指触屏 的椭圆区域
  • div.addEventListener('touchstart', rotate);
    div.addEventListener('touchmove', rotate);
    div.addEventListener('touchend', rotate); function rotate(e) {
    var touch = e.changedTouches.item(0);
    e.preventDefault(); src.style.width = touch.radiusX * 2 + 'px';
    src.style.height = touch.radiusY * 2 + 'px';
    src.style.transform = 'rotate(' + touch.rotationAngle + 'deg)';
    };
  • TouchList 接口

表示一组触摸点的集合。表示所有触摸点

它的实例是一个类似数组的对象,成员是 Touch 的实例对象

用户用三根手指触摸,产生的 TouchList 实例就会包含三个成员,每根手指的触摸点对应一个 Touch 实例对象

主要通过触摸事件的 event.touches、event.changedTouches、event.targetTouches 这几个属性获取

  • 实例属性

event.touches.length        

触摸点的数量

  • 实例方法

event.touches.item()        指定位置的成员,它的参数是该成员的位置编号(从零开始)   

event.touches.item(0);  等同于 event.touches[0];

  • 浏览器原生提供 TouchEvent() 构造函数,用来生成触摸事件的实例。除了被继承的属性以外,它还有一些自己的属性。

第一个参数 是字符串,表示事件类型

第二个参数是事件的配置对象,该参数是可选的,对象的所有属性也是可选的。

除了 Event 接口的配置属性,该接口还有一些自己的配置属性。

touches        TouchList 实例        代表屏幕上所有的的手指列表,默认值是一个空数组[]。

targetTouches        TouchList 实例        代表所有处在目标元素上的手指列表,默认值是一个空数组[]。

changedTouches        TouchList 实例        代表所有处目标元素 目标事件 上的手指列表 ,默认值是一个空数组[]。

ctrlKey        布尔值        表示 Ctrl 键是否同时按下,默认值为false。

shiftKey        布尔值        表示 Shift 键是否同时按下,默认值为false。

altKey        布尔值        表示 Alt 键是否同时按下,默认值为false。

metaKey        布尔值        表示 Meta 键(或 Windows 键)是否同时按下,默认值为false。

  • 触摸事件的种类    event.type

touchstart

用户开始触摸时触发,它的target属性返回发生触摸的元素节点。

touchend

用户不再接触触摸屏时(或者移出屏幕边缘时)触发

它的 target 属性 与 touchstart 事件一致的,就是开始触摸时所在的元素节点。

它的 changedTouches 属性返回一个 TouchList 实例,包含所有不再触摸的触摸点(即 Touch 实例对象)。

touchmove

用户移动触摸点时触发,

它的 target 属性 与 touchstart 事件一致。

如果触摸的半径角度力度发生变化,也会触发该事件。

touchcancel

触摸点取消时触发

比如在触摸区域跳出一个模态窗口(modal window)

触摸点离开了文档区域(进入浏览器菜单栏)、

用户的触摸点太多,超过了支持的上限(自动取消早先的触摸点)。

  • var el = document.getElementsByTagName('canvas')[0];
    el.addEventListener('touchstart', handleStart, false);
    el.addEventListener('touchmove', handleMove, false); function handleStart(evt) {
    evt.preventDefault();
    var touches = evt.changedTouches;
    for (var i = 0; i < touches.length; i++) {
    console.log(touches[i].pageX, touches[i].pageY);
    };
    }; function handleMove(evt) {
    evt.preventDefault();
    var touches = evt.changedTouches;
    for (var i = 0; i < touches.length; i++) {
    var touch = touches[i];
    console.log(touch.pageX, touch.pageY);
    };
    };
05-11 14:46