触摸事件

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

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

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

如果想避免这种情况,可以用 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() 构造函数,用来生成触摸事件的实例。除了被继承的属性以外,它还有一些自己的属性。
  • var touchEvent = new TouchEvent(type, options);

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

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

除了 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);
    };
    };

(97)Wangdao.com_第三十天_触摸事件的更多相关文章

  1. (98)Wangdao.com_第三十天_拖拉事件

    拖拉事件 拖拉 drag ,是指用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里. 一旦某个元素节点的 draggable 属性设为true,就无法再用鼠标选中该节 ...

  2. (93)Wangdao.com_第二十六天_鼠标事件

    鼠标事件 与鼠标相关的事件,继承了 MouseEvent 接口 分类: click        按下鼠标(通常是按下主按钮)时触发.        mousedown 首先触发,mouseup 接着 ...

  3. Jmeter(三十六)_运行过程中改变负载

    顾名思义,jmeter在做性能测试时,可以在不停止脚本的情况下修改负载压力,达到期望的测试效果.我们将通过Constant Throughput Timer(吞吐量计时器)和Beanshell服务器来 ...

  4. Jmeter(三十五)_分布式

    jmeter分布式简单步骤说明: 1:添加远程服务器IP到配置文件 在JMETER_HOME / bin / jmeter.properties中,找到名为“ remote_hosts ” 的属性,并 ...

  5. Jmeter(三十五)_精确实现网页爬虫

    Jmeter实现了一个网站文章的爬虫,可以把所有文章分类保存到本地文件中,并以文章标题命名 它原理就是对网页提交一个请求,然后把返回的所有值提取出来,利用ForEach控制器去实现遍历.下面来介绍一下 ...

  6. Jmeter(三十二)_搭建本地接口自动化环境

    我们在学习接口自动化的时候,最理想的状态是在公司有项目可以操作.大部分时候我们并没有可以练习的项目,因此练习接口无从谈起,只能找一些开放的api来练一练,但是这样并不能提高我们的技术.因此我们需要搭建 ...

  7. SpringBoot | 第三十二章:事件的发布和监听

    前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...

  8. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

  9. 第三十六节,目标检测之yolo源码解析

    在一个月前,我就已经介绍了yolo目标检测的原理,后来也把tensorflow实现代码仔细看了一遍.但是由于这个暑假事情比较大,就一直搁浅了下来,趁今天有时间,就把源码解析一下.关于yolo目标检测的 ...

随机推荐

  1. [物理学与PDEs]第1章习题2 均匀带电球面的电场强度与电势

    设有一均匀分布着电荷的半径为 $R$ 的球面, 其电荷密度 (即单位面积上的电荷量) 为 $\sigma$. 试求该球面所形成电场的电场强度及电势. 解答: 设 $P$ 距圆心的距离为 $r$, 不妨 ...

  2. 【hdu 5217】Brackets

    Description Miceren likes playing with brackets. There are N brackets on his desk forming a sequence ...

  3. Android 控件背景选择图片还是drawable XML资源

    决定一个控件应该是否用Drawable XML渲染,应考虑以下几个因素: * App是否要支持多分辨率: * App是否有瘦身的需要: * 图案是否足够简单: * 图案需要自由缩放: * 设计开发工作 ...

  4. php页面编码设置

    php的header来定义一个php页面为utf编码或GBK编码 php页面为utf编码 header("Content-type: text/html; charset=utf-8&quo ...

  5. 微信小程序-制作简易豆瓣笔记

    demo截图: 图书:      电影:        共工欲善其事,必先利其器: 小程序编辑器下载地址 : https://mp.weixin.qq.com/debug/wxadoc/dev/dev ...

  6. python学习第25天

    异常处理 什么是异常?什么是错误? 1,程序中难免出现错误. 错误主要分为两种: 1,语法错误 语法错误是根本上的错误,无法通过PYTHON解释器.完全无法执行,是在程序中不应该出现的错误.无法进行异 ...

  7. 【原创】大数据基础之Azkaban(1)简介、源代码解析

    Azkaban3.45 一 简介 1 官网 https://azkaban.github.io/ Azkaban was implemented at LinkedIn to solve the pr ...

  8. 【原创】运维基础之keepalived

    keepalived 2.0.12 官方:http://www.keepalived.org/ 一 简介 Keepalived is a routing software written in C. ...

  9. iOS开发之微信平台分享

    在工程开始之前应该先准备在微信开放平台申请的appid,从微信平台下载sdk文件.下面开始步骤讲述 1.先将SDK导入工程目录 2.在info.plist文件设置相关信息,包括appid标识.白名单 ...

  10. docker hub加速访问设置

    前言:docker是国外的,虽然有个版本开源免费,但是其docker  hub还是在国外,刚刚安装后,拉镜像就会发现,连接请求超时,中断服务,这是因为防火墙的问题,所以要将源指向国内的知名docker ...