移动Web开发入门(三) -- touch事件

2023-11-13

touch事件

touch事件是移动端特有的,由于移动端设备大都具备触摸功能,所以移动端浏览器都引入了触摸 touch事件。 touch相关的事件跟普通的其他dom事件一样使用,可以直接用addEventListener来监听和处理。

touch事件分类

  • touchstart:手指开始触碰时触发;
  • touchmove:手指滑动时触发;
  • touchend:手指移开时触发;
  • touchcancel :中断时触发;

touchcancel 不常用, 当一些更高级别的事件发生的时候(如电话接入或者弹出信息)会取消当前的touch操作。一般会在touchcancel时暂停游戏、存档等操作。

代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>移动端事件</title>
    <style>
        div{
            width: 200px;
            height: 200px;
            background-color: red;
        }
    </style>
</head>
<body>
    <div id="div"></div>
    <script>
        const divEl = document.getElementById('div');
        // false 代表不捕获,即冒泡
        divEl.addEventListener('touchstart', handStart, false);
        divEl.addEventListener('touchmove', handMove, false);
        divEl.addEventListener('touchend', handEnd, false);
        function handStart (){
            console.log('handStart');
        }
        function handMove (){
            console.log('handMove');
        }
        function handEnd (){
            console.log('handEnd');
        }
    </script>
</body>
</html>

页面效果

点击红色区域未移动

点击红色区域未移动时,触发touchstart、 touchmove事件;
在这里插入图片描述

点击红色区域,移动到红色区域抬起

点击红色区域,移动到红色区域抬起时,触发touchstart、 touchmove、touchend事件;
在这里插入图片描述

点击红色区域,移动到红色区域外抬起

点击红色区域,移动到红色区域外抬起时,触发touchstart、 touchmove、touchend事件;
在这里插入图片描述

在红色区域外点击,移动到红色区域抬起

在红色区域外点击,移动到红色区域抬起时,没有触发任何事件;
在这里插入图片描述

在红色区域外点击,穿过红色区域移动到红色区域外抬起

在红色区域外点击,穿过红色区域移动到红色区域外抬起时,没有触发任何事件;
在这里插入图片描述

event对象

event 对象代表事件的状态,当某个事件被触发时,会自动产生一个用来描述事件所有的相关信息。

   function handStart (e){
            console.log('handStart', e, e.changedTouches[0]);
        }

控制台打印event对象

TouchEvent {isTrusted: true, touches: TouchList, targetTouches: TouchList, changedTouches: TouchList, altKey: false, …}
altKey: false
bubbles: true       //***************冒泡*******************
cancelBubble: false
cancelable: true
changedTouches: TouchList    //********************触摸事件列表,是一个类数组*******************
	0: Touch {identifier: 0, target: div#div, screenX: 384, screenY: 296, clientX: 130.5263214111328, …}   //**********************下标从0开始***********************
	length: 1   //*****************长度为1,发生变化触摸点(手指)的个数**************************
	__proto__: TouchList
composed: true
ctrlKey: false
currentTarget: null
defaultPrevented: false
detail: 0
eventPhase: 0
isTrusted: true
metaKey: false
path: (5) [div#div, body, html, document, Window]
returnValue: true
shiftKey: false
sourceCapabilities: InputDeviceCapabilities {firesTouchEvents: true}
srcElement: div#div
target: div#div  	//********************触发事件的DOM元素****************************
targetTouches: TouchList
	0: Touch {identifier: 0, target: div#div, screenX: 384, screenY: 296, clientX: 130.5263214111328, …}
	length: 1  //******************目标(红色区域)上触摸点(手指)的个数**********************
	__proto__: TouchList
timeStamp: 948.7999999523163
touches: TouchList
	0: Touch {identifier: 0, target: div#div, screenX: 384, screenY: 296, clientX: 130.5263214111328, …}
	length: 1   //************************全部(整个屏幕)触摸点(手指)的个数******************************
__proto__: TouchList
type: "touchstart"    //*******************当前响应的事件处理函数***************************
view: Window {window: Window, self: Window, document: document, name: "", location: Location, …}
which: 0
__proto__: TouchEvent
  • touches 全部(整个屏幕)触摸点(手指)的个数;
  • targetTouches 目标(红色区域)上触摸点(手指)的个数;
  • changedTouches 发生变化触摸点(手指)的个数;

控制台打印changedTouches对象

Touch {identifier: 0, target: div#div, screenX: 278.3999938964844, screenY: 280.8000183105469, clientX: 146.7368621826172, …} 
clientX: 146.7368621826172   //*******可视区距离左上顶点的横向距离(不含滚动条)********
clientY: 117.68424224853516  //*******可视区距离左上顶点的纵向距离(不含滚动条)********
force: 1
identifier: 0
pageX: 146.7368621826172    //*******页面距离左上顶点的横向距离(含滚动条)********
pageY: 117.68424224853516   //*******页面距离左上顶点的纵向距离(含滚动条)********
radiusX: 12.105263710021973
radiusY: 12.105263710021973
rotationAngle: 0
screenX: 278.3999938964844
screenY: 280.8000183105469
target: div#div
__proto__: Touch
  • clientX、clientY是从可视区左上角开始算;
  • pageX、pageY是从页面左上角开始算,包括通过滚轴滚动的部分;
  • screenX、screenY触摸点在屏幕中的x,y坐标;

扩展

HAMMER.JS

hammer.js是一个移动端脚本框架,它实现了移动端开发的大多数事件(如:点击、滑动、拖动、多点触控等),避免了我们自己使用touch事件进行封装。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

移动Web开发入门(三) -- touch事件 的相关文章

  • 移动Web开发入门(一) -- 像素、媒体查询、em、rem

    文章目录 一 移动Web开发 二 基本概念 分辨率 物理像素 CSS像素 物理像素和CSS像素的关系 设备像素比 dpr 获取dpr PPI DPI 视口 viewport 设置 Viewport 获取视口宽度 三 媒体查询 媒体类型 媒体
  • 移动Web开发入门(三) -- touch事件

    文章目录 touch事件 touch事件分类 代码演示 页面效果 点击红色区域未移动 点击红色区域 移动到红色区域抬起 点击红色区域 移动到红色区域外抬起 在红色区域外点击 移动到红色区域抬起 在红色区域外点击 穿过红色区域移动到红色区域外
  • flex布局中的align-content属性

    align content属性起作用的条件 对父元素设置自由盒属性display flex 并且设置排列方式为横向排列flex direction row 默认值 设置换行 flex wrap wrap Demo代码
  • 移动Web开发入门(四) -- 移动端调试

    文章目录 移动端调试 浏览器调试 进入控制台 进入浏览器模拟器 切换测试机型 添加测试机型 改变屏幕尺寸 改变DPR 改变网络情况 改变屏幕显示大小 横 竖屏切换 真机测试 扩展 远程调试工具 vorlon js 多终端调试工具 brows
  • 移动互联网终端的touch事件,touchstart, touchend, touchmove

    前言 如果我们允许用户在页面上用类似桌面浏览器鼠标手势的方式来控制WEB APP 这个页面上肯定是有很多可点击区域的 如果用户触摸到了那些可点击区域怎么办呢 诸如智能手机和平板电脑一类的移动设备通常会有一个电容式触摸屏 capacitive
  • 考虑将事件处理程序标记为“被动”以使页面响应更快

    我使用锤子进行拖动 加载其他东西时它会变得不稳定 正如这条警告消息告诉我的那样 由于以下原因 touchstart 输入事件的处理延迟了 X 毫秒 主线程正忙 考虑将事件处理程序标记为 被动 使页面更具响应性 所以我尝试像这样向听众添加 被
  • 移除锤子事件

    我使用hammer js 库创建一个事件 如下所示 Hammer myElement on doubletap function evt evt preventDefault 那么我怎样才能删除注册的事件呢 我也可以使用 Jquery 吗
  • Hammer JS 无法与主干一起工作

    我正在尝试让 Hammer JS 事件与主干一起工作 但无法让它响应事件 我已经尝试过以下方法 http cijug ne t tech 2013 01 16 backbone hammer https gist github com kj
  • Hammer.js 无法删除事件监听器

    我创建了一个锤子实例 如下所示 var el document getElementById el var hammertime Hammer el 然后我可以添加一个监听器 hammertime on touch function e c
  • 如何在 Angular 中注册触摸移动事件?

    总结一下问题 堆栈闪电战 https stackblitz com edit angular touch playground https stackblitz com edit angular touch playground 我正在尝试
  • 垂直滚动不适用于 HammerJS 和 Angular2

    我在 Angular2 中使用 HammerJS 时遇到问题 我有一个轮播 基于带有 Angular2 事件处理程序的引导轮播 我正在其中收听向左滑动 and 向右滑动事件 滑动本身效果很好 问题是 由于我使用 HammerJS 我无法在轮
  • Google Chrome 防止捏合缩放

    我正在运行 Windows 8 1 的 Microsoft Surface Pro 2 上开发 Chrome 应用程序 最近 Chromium 团队决定在 Windows 8 的 Chrome 中添加捏合缩放手势 这一切都很好 然而 他们并
  • 在动态加载的内容上使用hammer.js

    我正在使用hammer js 开发一个网络应用程序 我可以让它正常工作 除了使用 ajax 加载的内容 我使用 jquery 的hammer js 特殊事件插件 以下工作正常 menu a on tap function event con
  • Hammer.js 平移事件仅适用于触摸设备,不适用于桌面计算机单击+拖动

    我使用这个标准代码进行平移 捏合 1 使用 Hammer js var mc new Hammer document body mc add new Hammer Pinch threshold 0 recognizeWith mc get
  • iOS 13 在更改平移方向时不会引发 panend 事件

    我有一个使用 Hammer js 事件的自定义图像滑块 我使用以下内容来创建我的 锤子 对象 const hammerPan new Hammer domElement lock vertical scrolling when pannin
  • 将backbone.js 与hammer.js 结合使用

    想知道是否有人在hammer js中使用过backbone以及如何实现Backbone View与hammer js 的拖动 按住事件有关吗 您不能直接在 delegateEvents 中使用 Hammerjs 事件 但有一些插件可以修补
  • 使用 Hammer.js 进行事件委托

    我如何在 Hammer js 中使用纯 JavaScript 进行 jQuery 风格的事件委托 例如 Hammer document on tap item function console log tapped 这是直接可行的还是我必须
  • HammerJS 滑动不适用于具有溢出 css 属性的元素

    EDIT 该片段在嵌入问题时工作正常 但在编辑时则不然 这让我意识到这与可以滚动的底层容器有关 我在手机上测试了这一点 锤子在没有滚动条的小区域上工作得很好overflow财产 我更新了代码片段以反映这一点 问题是 如何让它在需要垂直滚动的
  • HammerJS 滑动与 Mat-Tabs 阻止垂直滚动

    所以我的 Angular 应用程序中有一个组件 其中包含数据类别的选项卡以及选项卡内容的值数组 我想使用 HammerJS 在选项卡之间滑动以获得更原生的体验 我还安装了这个虚拟滚动包 https github com rintoj ang
  • 关于使用 Ionic3 和 Hammer.JS 进行捏合缩放手势的独家新闻是什么?

    我需要能够在 Android 和 iOS 上进行捏合缩放以缩放字体大小 不仅仅是我在谷歌搜索时看到的众多示例中的常规图像 有人可以告诉我在 Ionic 3 中是否有一种简单的方法可以做到这一点吗 文档 https ionicframewor

随机推荐

  • R包——maftools可视化神器

    参考 http bioconductor org packages release bioc vignettes maftools inst doc maftools html 目录 介绍 准备 格式转换 总体分析框架 maftools安装
  • 每个工程师都应该知道的 5 个射频发射器测量指标(自NI官网翻译)

    概述 射频发射器是现代通信的重要组成部分 射频发射器由核心射频组件设计和组装而成 具有多种不同的形式和应用 我们经常想到无线通信中的射频发射器 但这个概念同样适用于有线应用 如有线电视 蜂窝电话 雷达 军事通信 航空电子设备 无线局域网 调
  • 第三节课笔记(条件语句与循环语句)

    条件语句与循环语句 一 数据类型 标准数据类型 Python3中有六个标准的数据类型 Number 数字 支持int float bool complex 复数 Sring 字符串 Python中的字符串用单引号 或双引号 括起来 同时使用
  • 18650锂电池保护板接线图_锂电池保护板的过流保护测试方案

    电池保护板 顾名思义锂电池保护板主要是针对可充电 一般指锂电池 起保护作用的集成电路板 锂电池 可充型 之所以需要保护 是由它本身特性决定的 由于锂电池本身的材料决定了它不能被过充 过放 过流 短路及超高温充放电 因此锂电池锂电组件总会跟着
  • java long 详解_JavaSE之Long 详解 Long的方法简介以及用法

    基本功能 Long 类在对象中包装了基本类型 long 的值 每个 Long 类型的对象都包含一个 long 类型的字段 static long MAX VALUElong 8个字节 最大值2 63 1 十六进制 0x80000000000
  • android Intent启动flag

    android Intent启动flag 分类 android框架 2013 10 30 14 47 1318人阅读 评论 0 收藏 举报 FLAG GRANT READ URI PERMISSION 如果设置这个标记 Intent的接受者
  • react中@withrouter_React系列十 - 高阶组件以及组件补充

    源自 coderwhy 一 高阶组件 1 1 认识高阶组件 什么是高阶组件呢 相信很多同学都听说过 也用过 高阶函数 它们非常相似 所以我们可以先来回顾一下什么是 高阶函数 高阶函数的维基百科定义 至少满足以下条件之一 接受一个或多个函数作
  • Qt+webservice的多线程实现

    原文地址 https blog csdn net qq 29176963 article details 82776588 相关文章 1 Qt 之 QtSoap 访问WebService https blog csdn net liang1
  • linux lvm在线扩容

    步骤 创建新的PV 将新的PV加入到当前VG 扩容现有LV 扩容文件系统 1 fdisk dev sda n 新增 p 主分区 大小自己调整 可以默认 记得用 t 转换格式为 8e lvm分区号 最后 w 保存 2 partprobe de
  • GitHub访问量超百万的阿里大佬总结图解Java小册火了,完整版限时开源

    什么是Java Java是Sun Microsystems于1995年首次发布的一种编程语言和计算平台 Java是快速 安全和可靠的 从笔记本电脑到数据中心 从游戏机到科学超级计算机 从手机到互联网 Java无处不在 Java的特点 Jav
  • npm依赖更新无效

    项目场景 项目是使用ice 2 0 0搭建的react项目 项目需要替换新版本的sdk 使用npm进行对应sdk的版本升级 问题描述 卸载sdk tnpm uninstall tds sdk 安装最新版本sdk tnpm i tds sdk
  • 互转(经纬度、地心坐标、东北天坐标)

    Part1三种坐标系介绍 经纬度坐标 假设空间某点P 用经纬度表示的话 你们B代表纬度 L代表经度 H代表大地高 纬度B P点沿着地球法线方向与赤道面的夹角 向北为正称为北纬 0 90 向南为负称为南纬 0 90 实际表示可以用 90 90
  • Error:(6, 46) java: 程序包org.springframework.context.annotation不存在

    IDEA 莫名其妙突然出现出错 Error 6 46 java 程序包org springframework context annotation不存在 经本地测试采用如下方法可以解决 1 修改在File gt settings gt Bu
  • MATLAB基础篇——基本语法

    MATLAB基础篇 基本语法 一 数据类型与变量 数据类型 变量 二 矩阵 字符串 三 运算 四 MATLAB常用函数 五 矩阵分析与处理 六 程序设计 七 符号计算 MATLAB Matrix laboratory 一般操作 1 操作界面
  • vue高级篇

    笔记 脚手架文件结构 node modules public favicon ico 页签图标 index html 主页面 src assets 存放静态资源 logo png component 存放组件 HelloWorld vue
  • 算法之路--高斯分布(一)

    正态分布 英语 normal distribution 又名高斯分布 英语 Gaussian distribution 是一个非常常见的连续概率分布 正态分布在统计学上十分重要 经常用在自然和社会科学来代表一个不明的随机变量 可以判断各种情
  • jenkins api获取构建日志_Jenkins master位于k8s集群外,实现jenkins slave的动态构建

    Jenkins基于 kubernetes plugin 与k8s集成 可以使Jenkins slave以pod的形式在k8s集群内部动态构建 运行 销毁等 通过 jenkinsci kubernetes plugin 了解到 Jenkins
  • arm-none-linux-gnueabi-gcc下载

    arm none linux gnueabi gcc是 Codesourcery 公司 目前已经被Mentor收购 基于GCC推出的的ARM交叉编译工具 可用于交叉编译ARM系统中所有环节的代码 包括裸机程序 u boot Linux ke
  • 分词汇总

    SCWS Author Hightman 算法 基于词频词典的机械中文分词引擎 采用的是采集的词频词典 并辅以一定的专有名称 人名 地名 数字年代等规则识别来达到基本分词 准确率 经小范围测试大概准确率在 90 95 之间 已能基本满足一些
  • 移动Web开发入门(三) -- touch事件

    文章目录 touch事件 touch事件分类 代码演示 页面效果 点击红色区域未移动 点击红色区域 移动到红色区域抬起 点击红色区域 移动到红色区域外抬起 在红色区域外点击 移动到红色区域抬起 在红色区域外点击 穿过红色区域移动到红色区域外