一 触摸事件

触发场景:当手指放在屏幕上、在屏幕上滑动或从屏幕移开 时,触摸事件即会触发

触摸事件

事件 定义
touchstar  手指放到屏幕上时触发(即使有一个手指已经放在了屏幕上)
touchmove 手指在屏幕上滑动时连续触发。在这个事件中调用 preventDefault()可以阻止滚动
touchend 手指从屏幕上移开时触发
touchcancel 系统停止跟踪触摸时触发。文档中并未明确什么情况下停止跟踪

属性大全

  • 鼠标事件的公共属性:bubbles、 cancelable、view、clientX、clientY、screenX、screenY、detail、altKey、shiftKey、 ctrlKey 和 metaKey
  • 用于跟踪触点的属性
    • touches:Touch 对象的数组,表示当前屏幕上的每个触点
    • targetTouches:Touch 对象的数组,表示特定于事件目标的触点
    • changedTouches:Touch 对象的数组,表示自上次用户动作之后变化的触点。
    • 每个 Touch 对象都包含下列属性:
      • clientX:触点在视口中的 x 坐标
      • clientY:触点在视口中的 y 坐标
      • identifier:触点 ID
      • pageX:触点在页面上的 x 坐标
      • pageY:触点在页面上的 y 坐标
      • screenX:触点在屏幕上的 x 坐标
      • screenY:触点在屏幕上的 y 坐标
      • target:触摸事件的事件目标。

 触发顺序:当手指点触屏幕上的元素时,依次会发生如下事件(包括鼠标事件)

  • (1) touchstart
  • (2) mouseover
  • (3) mousemove(1 次)
  • (4) mousedown
  • (5) mouseup
  • (6) click
  • (7) touchend
function handleTouchEvent(event) { // 只针对一个触点if (event.touches.length == 1) { let output = document.getElementById("output"); switch(event.type) { case "touchstart": output.innerHTML += `<br>Touch started:` + `(${event.touches[0].clientX}` + ` ${event.touches[0].clientY})`; break; case "touchend": output.innerHTML += `<br>Touch ended:` + `(${event.changedTouches[0].clientX}` + ` ${event.changedTouches[0].clientY})`; break; case "touchmove": event.preventDefault(); // 阻止滚动output.innerHTML += `<br>Touch moved:` + `(${event.changedTouches[0].clientX}` + ` ${event.changedTouches[0].clientY})`; break; } }
}
document.addEventListener("touchstart", handleTouchEvent);
document.addEventListener("touchend", handleTouchEvent);
document.addEventListener("touchmove", handleTouchEvent); // 以上代码会追踪屏幕上的一个触点。为简单起见,代码只会在屏幕有一个触点时输出信息。
// 在touchstart 事件触发时,触点的位置信息会输出到 output 元素中。
// 在 touchmove 事件触发时,会取消默认行为以阻止滚动(移动触点通常会滚动页面),并输出变化的触点信息。
// 在 touchend 事件触发时,会输出触点最后的信息。注意,touchend 事件触发时 touches 集合中什么也没有,这是因为没有滚动的触点了。此时必须使用 changedTouches 集合

二 手势事件

定义:手势事件会在两个手指触碰屏幕且相对距离或旋转角度变化时触发

事件:

  • gesturestart:一个手指已经放在屏幕上,再把另一个手指放到屏幕上时触发
  • gesturechange:任何一个手指在屏幕上的位置发生变化时触发
  • gestureend:其中一个手指离开屏幕时触发

属性:

  • 含所有标准的鼠标事件属性:bubbles、 cancelable、view、clientX、clientY、screenX、screenY、detail、altKey、shiftKey、 ctrlKey 和 metaKey
  • event 对象属性: rotation 和 scale
    • rotation 属性表示手指变化旋转的度数,负值表示逆时针旋转,正值表示顺时针旋转(从 0 开始)
    • scale 属性表示两指之间距离变化(对捏)的程度。开始时为 1,然后随着距离增大或缩小相应地增大或缩小
// 可以像下面这样使用手势事件的属性:
function handleGestureEvent(event) { let output = document.getElementById("output"); switch(event.type) { case "gesturestart": output.innerHTML += `Gesture started: ` + `rotation=${event.rotation},` + `scale=${event.scale}`; break; case "gestureend": output.innerHTML += `Gesture ended: ` + `rotation=${event.rotation},` + `scale=${event.scale}`; break; case "gesturechange": output.innerHTML += `Gesture changed: ` + `rotation=${event.rotation},` + `scale=${event.scale}`; break; }
}
document.addEventListener("gesturestart", handleGestureEvent, false);
document.addEventListener("gestureend", handleGestureEvent, false);
document.addEventListener("gesturechange", handleGestureEvent, false); 

三 两者关系

  • 当一个手指放在屏幕上时,会触发 touchstart 事件。
  • 当另 一个手指放到屏幕上时,gesturestart 事件会首先触发,然后紧接着触发这个手指的 touchstart 事件。
  • 如果两个手指或其中一个手指移动,则会触发 gesturechange 事件。
  • 只要其中一个手指离开屏幕,就会触发 gestureend 事件,紧接着触发该手指的 touchend 事件

事件之触摸及手势事件相关推荐

  1. JavaScript触摸与手势事件

    处理Touch事件能让你跟踪用户的每一根手指的位置.你可以绑定以下四种Touch事件: 1.touchstart:  // 手指放到屏幕上的时候触发  2.touchmove:  // 手指在屏幕上移 ...

  2. Android开发笔记(四十五)手势事件

    手势事件的流程 基本手势事件 基本的手势事件主要有如下三个方法: dispatchTouchEvent : 判断该事件是否需要下发.返回true表示需要下发给下级视图,返回false表示不需要下发(交 ...

  3. Compose 手势事件:防止重复点击,双击,长按,全局触摸隐藏键盘

    前言 JetPack Compose (后续简称compose) release版已经出来了三四个月了,虽然没正式版之前也学过几次,但一直没有机会用,在加上api的变更,导致之前学的都忘完了,现在终于 ...

  4. JS—触摸事件、手势事件

    JS-触摸事件.手势事件 dbclick 触屏设备不支持双击事件.双击浏览器窗口,会放大画面. 可以通过在head标签内加上这么一行: <meta name="viewport&quo ...

  5. iOS UITouch触摸与UIGesture手势.01.事件、触摸(touch)事件

    一.iOS事件: 1.事件:事件就是当你在手机上点击手机屏幕.滑动手机翻面.摇动手机的时候,手机做出一些反应,对应的在应用程序里实现了某些代码的某些功能,完成这个过程就是一个事件. 2.iOS事件类型 ...

  6. iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控

    -- iOS事件全面解析 概览 iPhone的成功很大一部分得益于它多点触摸的强大功能,乔布斯让人们认识到手机其实是可以不用按键和手写笔直接操作的,这不愧为一项伟大的设计.今天我们就针对iOS的触摸事 ...

  7. android touch事件坐标原点,Android onTouch事件与手势操作

    触摸,手势操作已经很好的融入了我们的生活.那么Android开发中触摸事件要如何捕捉?如何处理?如何识别手势?事件的传递机制又是怎么样的?下面我们将通过一个小例子来进行这方面的学习. 先看效果图 如上 ...

  8. IOS 定义手势监听器详解,利用 UIGestureRecognizer 进行捏合、旋转、平移、点击、长按手势事件响应

    IOS中我们可以通过UITouch进行触摸事件监听,但是UITouch实现捏合.旋转.长按等手势事件监听非常麻烦.IOS中提供 UIGestureRecognizer 的子类帮我们简洁等实现捏合.旋转 ...

  9. ios 滑动手势事件 与cell touchevent事件_深入浅出~手势操作原理分析

    序言 在移动端开发中,手势操作非常常见,本篇文章主要讲解常见的 9 种手势操作原理,期间会穿插一些数学知识,将数学运用到实际问题中,数学部分可能会比较枯燥,但希望大家坚持读完,相信会收益良多. 点按: ...

最新文章

  1. DevOps 工具链可推动你的创新计划!
  2. Linux三剑客之awk详解
  3. Hibernate关联查询
  4. Android AsyncTask 深度理解、简单封装、任务队列分析、自定义线程池
  5. 报错:未能加载文件或程序集“XXX”或它的某一个依赖项。系统找不到指定的文件...
  6. java设计模式教程_Java设计模式教程
  7. Kotlin——初级篇(二):变量、常量、注释
  8. appcan双击返回退出系统
  9. 电脑小问题四:知网CAJ格式转下载PDF格式
  10. 互联网快讯:粉笔科技双轨并进未来可期;猿辅导优质教学获赞赏;网红奶茶古茗被罚
  11. 全国哀悼日,CSS如何把整个网页黑白显示
  12. java拼图游戏难度怎么分级_拼图游戏有什么技巧吗?
  13. ecshop模板支持php,ecshop模板不支持引入PHP语句的解决方法
  14. 软件测试基础知识 - 集成测试和系统测试的区别,以及它们的应用场景
  15. Axure的授权人与授权码
  16. 链表逆置(三种方法详解)
  17. Tensorflow2.0版本下如何实现Kronecker积
  18. JAVAScript——JQuery—$ ( )
  19. 仿牛客社区项目笔记-帖子模块(核心)
  20. 引用vue-baidu-map 做一个签到打卡功能

热门文章

  1. 马云的蚂蚁金服很牛吧!深度解密背后的智能调度技术如何优化客服中心的资源调配
  2. Telnet登录、ssh登录
  3. 预计到2020年中东电商市场规模将增长40%以上
  4. 微信小程序列表播放视频 播放当前视频上一个暂停
  5. 查看Centos服务器ip的命令
  6. 数商云农牧行业软硬一体化解决方案丨提高运营管控,产业链协同
  7. 【python】hasattr( )的用法
  8. 地狱模式年度中期体验报告
  9. centos 下tar.gz 文件解压失败
  10. SpringCloud: 分布式配置中心(Spring Cloud Config)