# 移动端事件核心知识梳理
移动端事件的发展
1、没有移动端事件,大部分 鼠标事件 在移动端一样有用
2、苹果推出 Touch 触摸事件
3、微软推出 Pointer 指针事件(统一鼠标、触摸、笔)
# Touch 事件
# 事件类型
| 名称 | 描述 |
|---|---|
| touchstart | 当手指触摸屏幕时触发(触摸开始) |
| touchmove | 当手指在屏幕上移动时连续地触发(触摸移动) |
| touchend | 当手指从屏幕上抬起时触发(触摸结束) |
| touchcancel | 手指还在屏幕上时,系统停止跟踪触摸时触发(触摸取消) 例如:手指正在屏幕上移动时,突然打进来一个电话 ,此时就会触发该事件 |
# 注意事项
| 名称 | 描述 |
|---|---|
| 注意事项 | ① Touch 事件在 PC 端不会触发,鼠标事件在 PC 端和移动端都会触发 ② 即使触摸点移出目标元素,touchmove 事件依然会持续触发, mousemove 事件不会再触发 ③ Touch 事件的特征检测(判断浏览器支不支持 Touch 事件) |
# Touch 事件的特征检测
| 名称 | 描述 |
|---|---|
| Touch 事件的特征检测 | 判断浏览器是否支持 touch 事件,可以通过 in 关键字,判断该事件是否是 window 对象上的一个属性,返回结果为 true 则表示支持,反之则不支持。 以 ontouchstart 事件为例: if (Contouchstart' in window) { console.log(支持); } |
# Touch 事件的 event 对象
TIP
event 对象的常用属性
| 属性名 | 描述 |
|---|---|
| event.type | 事件类型 |
| event.target | 目标元素(绑定事件的源元素) |
| event.touches | 屏幕上的所有触摸点 |
| event.targetTouchs | 起始于目标(绑定事件的源元素)上的所有触摸点 |
| event.changedTouches | 事件触发时,状态发生了改变的所有触摸点 |
触摸点的常用属性
以单指触摸点 const touch = event.changedTouches[0]; 为例
| 属性名 | 描述 |
|---|---|
| indentifier | 触摸点 id(唯一表示符),一般多指触摸有用 |
| target | 目标元素(绑定事件的源元素) |
| screenX / screenY | 触点相对于屏幕左边缘的 X、Y 坐标 |
| clientX / clientY | 触点相对于可视区域边缘的 X、Y 坐标,不包括任何滚动偏移 |
| pageX / pageY | 触点相对于 HTML 文档左边缘的 X、Y 坐标,包括滚动偏移 |
阻止浏览器默认行为
阻止浏览器存在 scrolling 滚动,pinch/zoom 手指缩放、鼠标事件等默认行为
| 名称 | 描述 |
|---|---|
| 解决方式 一 | 可以在 touch 的事件处理函数中使用 event.preventDefault0 阻止浏览器的默认行为 |
| 解决方式二 | touch-action 告诉浏览器哪些触摸操作让浏览器处理,阻止其他触摸操作的默认行为: ① touch-action: auto; 允许浏览器处理所有的触摸操作 ② touch-action: none; 禁止浏览器处理所有的默认触摸操作 ③ touch-action: pan-x; 只允许浏览器处理水平方向的触摸操作 ④ touch-action: pan-y; 只允许浏览器处理垂直方向的触摸操作 ⑤ touch-action: manipulation; 只允许进行滚动和持续缩放操作,不允许双击缩放 |
# Pointer 事件
# 事件类型
指针:表示输入设备
例如:可触摸表面上的鼠标或接触点等
| 名称 | 描述 |
|---|---|
| pointerover | 指针进入目标元素区域时触发 |
| pointerenter | 指针进入目标元素边界时触发 |
| pointerout | 指针离开目标元素区域时触发 |
| pointerleave | 指针离开目标元素边界时触发 |
| pointerdown | 当指针激活时触发 |
| pointermove | 当指针移动时触发 |
| pointerup | 当指针不再处于计划状态时触发 |
| pointercancel | 如果浏览器断定指针将不再能够生成事件(例如:相关设备已停用)则会触发该事件 |
# 注意事项
| 名称 | 描述 |
|---|---|
| 注意事项 | ① Pointer 事件直接继承了鼠标事件,在此基础上又添加了其他一些内容,处理 Pointer 事件和处理鼠标事件几乎致 ② Pointer 事件在 PC 端和移动端都会触发 ③ 触摸点移出目标元素,touchmove 事件依然会持续触发,pointermove 和 mousemove 事件不会再触发 |
# Pointer 事件的特征检测
| 名称 | 描述 |
|---|---|
| Pointer 事件的特征检测 | 判断浏览器支不支持 Pointer 事件,可以通过 in 关键字,判断该事件是否是 window 对象上的一个属性 ,返回结果为 true 则表示支持,反之则不支持。 以 onpointerdown 事件为例: if ('onpointerdown' in window) { console.log('支持 Pointer 事件'); } |
# Pointer 事件的 event 对象
TIP
event 对象的常用属性
| 属性名 | 描述 |
|---|---|
| pointerId | 指针 id(唯一标识符) |
| target | 目标元素 |
| type | 事件类型 |
| pointerType | 指针类型(鼠标/笔/触摸等) |
| screenX/screenY | 指针相对于屏幕左边缘的 X、Y 坐标 |
| clientX/clientY | 指针相对于可视区域左边缘的 X、Y 坐标。不包括任何滚动傧移 |
| x/y | clientX/clientY 的别名 |
| pageX/pageY | 指针相对于 HTML 文档左边缘的 X、Y 坐标。包括滚动傧移 |
TIP
阻止浏览器默认行为
| 名称 | 描述 |
|---|---|
| 方式一 | ① Pointer 的事件处理函数中,event.preventDefault() 阻止的是 PC 端的默认行为 ② 能够阻止图片拖动的默认行为 ③ 不能阻止浏览器存在 scrolling 滚动,pinch/zoom 手指缩放、鼠标事件等默认行为 |
| 方式二 | 可以在 touch 的事件处理函数中使用 event.preventDefault() 阻止移动端的默认行为 |
| 方式三 | touch-action 设置触摸操作时浏览器的默认行为: ① touch-action: manipulation; 只允许进行滚动和持续缩放操作,不允许双击缩放 ② touch-action: pan-y; 只允许浏览器处理垂直方向的触摸操作 ③ touch-action: pan-x; 只允许浏览器处理水平方向的触摸操作 ④ touch-action: none; 禁止浏览器处理所有的默认触摸操作 ⑤ touch-action: auto; 允许浏览器处理所有的触摸操作 |
大厂最新技术学习分享群
微信扫一扫进群,获取资料
X