touchstart
基础信息说明
功能概述:
- window.addEventListener("touchstart", callback, false):监听开始触摸事件
- window.removeEventListener("touchstart", callback):取消监听开始触摸事件
| 项目 | 说明 |
| 版本要求 | 无 |
| 前提条件 | 无 |
| 使用限制 | 无 |
| 相关教程 | 无 |
参数说明
window.addEventListener("touchstart", callback, false)
| 属性名 | 类型 | 默认值(如有) | 必填 | 说明 |
| event | String | - | 是 | 事件类型,固定为 "touchstart" |
| callback | Function | - | 是 | 事件回调函数,当开始触摸事件触发时调用。回调函数接收一个事件对象作为参数 |
| useCapture | Boolean | false | 否 | 是否在捕获阶段触发,通常传入 false 或不传(默认为 false) |
window.removeEventListener("touchstart", callback)
| 属性名 | 类型 | 默认值(如有) | 必填 | 说明 |
| event | String | - | 是 | 事件类型,固定为 "touchstart" |
| callback | Function | - | 是 | 要移除的事件回调函数,必须与 addEventListener 时传入的同一个函数引用 |
返回值说明
同步方法:addEventListener 和 removeEventListener 均为同步接口,调用后立即返回,无返回值。
回调结果说明
- touchstart 事件为异步事件回调。addEventListener 方法用于注册回调函数,该回调函数会在手指触摸屏幕时被异步触发,而不是在注册时立即执行。
触摸事件回调由底层触摸系统在用户触摸屏幕时触发。回调的触发时机如下:
- touchstart:当手指触摸屏幕时立即触发
回调成功
touchstart 回调
TouchEvent 对象属性
| 属性名 | 类型 | 说明 |
| touches | Array | 当前所有触摸点的数组,数组元素为 Touch 对象 |
| changedTouches | Array | 本次事件中新加入的触摸点数组,元素为 Touch 对象 |
| targetTouches | Array | 仍与当前事件目标相关的触摸点数组 |
| timeStamp | Number | 事件触发时间戳(毫秒) |
| type | String | 事件类型,固定为 "touchstart" |
| target | null | 触发事件的目标 |
| currentTarget | null | 当前事件处理目标 |
| eventPhase | Number | 事件所处阶段,2 表示处于冒泡阶段 |
| preventDefault | Function | 阻止默认行为 |
| stopPropagation | Function | 阻止事件继续冒泡 |
运行时对象上还存在 _type、_target 等内部字段,请根据实际情况使用。
Touch 对象属性说明
| 属性名 | 类型 | 说明 |
| identifier | Number | 触摸点的唯一标识符 |
| clientX | Number | 触摸点相对于视口左上角的 X 坐标(像素) |
| clientY | Number | 触摸点相对于视口左上角的 Y 坐标(像素) |
| pageX | Number | 触摸点相对于页面左上角的 X 坐标(像素) |
| pageY | Number | 触摸点相对于页面左上角的 Y 坐标(像素) |
| target | Object | 触摸目标 |
示例代码
// 定义触摸开始事件处理函数(最简示例)
function handleTouchStart(event) {
// 直接查看回调入参(TouchEvent)
console.log('touchstart event:', event)
// 常见:查看第一个触摸点(Touch)
const firstTouch = event?.touches?.[0]
console.log('first touch:', firstTouch)
}
// 注册与移除监听(需要相同函数引用)
window.addEventListener('touchstart', handleTouchStart, false)
// window.removeEventListener('touchstart', handleTouchStart, false)注意事项
- addEventListener 和 removeEventListener 必须使用同一个函数引用才能正确移除监听
- 如果使用匿名函数作为回调,将无法通过 removeEventListener 移除监听
- touchstart 事件在手指刚接触屏幕时立即触发,通常用于检测触摸开始
- 支持多点触摸,touches 数组包含所有当前触摸点
- changedTouches 数组包含本次事件中新增的触摸点
touchmove
基础信息说明
功能概述:
- window.addEventListener("touchmove", callback, false):监听触点移动事件
- window.removeEventListener("touchmove", callback):取消监听触点移动事件
| 项目 | 说明 |
| 版本要求 | 无 |
| 前提条件 | 无 |
| 使用限制 | 无 |
| 相关教程 | 无 |
参数说明
window.addEventListener("touchmove", callback, false)
| 属性名 | 类型 | 默认值 | 必填 | 说明 |
| event | String | - | 是 | 事件类型,固定为 "touchmove" |
| callback | Function | - | 是 | 事件回调函数,当触点移动事件触发时调用。回调函数接收一个事件对象作为参数 |
| useCapture | Boolean | false | 否 | 是否在捕获阶段触发,通常传入 false 或不传(默认为 false) |
window.removeEventListener("touchmove", callback)
| 属性名 | 类型 | 默认值 | 必填 | 说明 |
| event | String | - | 是 | 事件类型,固定为 "touchmove" |
| callback | Function | - | 是 | 要移除的事件回调函数,必须与 addEventListener 时传入的同一个函数引用 |
返回值说明
同步方法:addEventListener 和 removeEventListener 均为同步接口,调用后立即返回,无返回值。
回调结果说明
touchmove 事件为异步事件回调。addEventListener 方法用于注册回调函数,该回调函数会在手指在屏幕上移动时被异步触发,而不是在注册时立即执行。
触摸事件回调由底层触摸系统在用户移动手指时触发。
回调成功
touchmove 回调
| 属性名 | 类型 | 说明 |
| type | String | 事件类型,为 "touchend" |
| timeStamp | Number | 事件触发的时间戳(毫秒整数) |
| touches | Array | 当前活跃触点集合,触点结束后为空数组 |
| changedTouches | Array | 本次结束的触点集合,可通过索引访问 |
| targetTouches | Array | 当前与事件目标关联的触点集合 |
| _type | String | 内部类型标记,为 "touchend" |
| _target | any | 内部保存的目标对象 |
| _currentTarget | any | 内部保存的当前目标 |
| _eventPhase | Number | 事件所处阶段(触发时为冒泡阶段) |
| _passiveListener | any | 被动监听器引用,当前环境下为 null |
| _stopped | Boolean | 是否停止传播标记,默认 false |
| _canceled | Boolean | 是否被取消标记,默认 false |
Touch 对象属性
| 属性名 | 类型 | 说明 |
| identifier | Number | 唯一标识符(示例常见为 0 或其他整数) |
| pageX | Number | 结束瞬间相对于页面的 X 坐标 |
| pageY | Number | 结束瞬间相对于页面的 Y 坐标 |
| clientX | Number | 结束瞬间相对于视口的 X 坐标 |
| clientY | Number | 结束瞬间相对于视口的 Y 坐标 |
| target | any | 触点目标对象(在该环境打印为 global 等非 DOM 对象) |
示例代码
// 定义触摸结束事件处理函数(最简示例)
function handleTouchEnd(event) {
console.log('touchend event:', event)
// 常见:查看第一个离开屏幕的触点(Touch)
const firstChanged = event?.changedTouches?.[0]
console.log('first changed touch:', firstChanged)
}
// 注册与移除监听(需要相同函数引用)
window.addEventListener('touchend', handleTouchEnd, false)
// window.removeEventListener('touchend', handleTouchEnd, false)注意事项
- addEventListener 和 removeEventListener 必须使用同一个函数引用才能正确移除监听
- 如果使用匿名函数作为回调,将无法通过 removeEventListener 移除监听
- touchend 事件在手指离开屏幕时触发,通常用于检测触摸结束或完成点击操作
- 支持多点触摸,touches 数组包含所有当前仍在屏幕上的触摸点(已离开的触摸点不在其中)
- changedTouches 数组包含本次事件中离开的触摸点
- touchend 事件中的坐标是手指离开屏幕时的最后位置
touchcancel
基础信息说明
功能描述:监听/取消监听触点失效事件,当触摸事件被系统取消时触发该事件(例如来电、系统弹窗等中断触摸操作)
- window.addEventListener("touchcancel", callback, false):监听触点失效事件
- window.removeEventListener("touchcancel", callback):取消监听触点失效事件
| 项目 | 说明 |
| 版本要求 | 无 |
| 前提条件 | 无 |
| 使用限制 | 无 |
| 相关教程 | 无 |
参数说明
window.addEventListener("touchcancel", callback, false)
| 属性名 | 类型 | 默认值(如有) | 必填 | 说明 |
| event | String | - | 是 | 事件类型,固定为 "touchcancel" |
| callback | Function | - | 是 | 事件回调函数,当触点失效事件触发时调用。回调函数接收一个事件对象作为参数 |
| useCapture | Boolean | false | 否 | 是否在捕获阶段触发,通常传入 false 或不传(默认为 false) |
window.removeEventListener("touchcancel", callback)
| 属性名 | 类型 | 默认值(如有) | 必填 | 说明 |
| event | String | - | 是 | 事件类型,固定为 "touchcancel" |
| callback | Function | - | 是 | 要移除的事件回调函数,必须与 addEventListener 时传入的同一个函数引用 |
返回值说明
同步方法:addEventListener 和 removeEventListener 均为同步接口,调用后立即返回,无返回值。
回调结果说明
touchcancel 事件为异步事件回调。addEventListener 方法用于注册回调函数,该回调函数会在触摸事件被系统取消时被异步触发,而不是在注册时立即执行。
回调成功
touchend 回调
TouchEvent 对象属性
| 属性名 | 类型 | 说明 |
| type | String | "touchcancel" |
| timeStamp | Number | 事件触发时间戳(毫秒,小数形式) |
| isTrusted | Boolean | true |
| bubbles | Boolean | true |
| cancelable | Boolean | false(无法 preventDefault) |
| eventPhase | Number | 0(事件处于 NONE 阶段) |
| target | Element | 实测为触摸区域 DOM,例如 div#testArea |
| currentTarget | any | null(示例代码未绑定到具体元素) |
| touches | TouchList | 当前仍在屏幕上的触点集合,触点被取消后长度为 0 |
| targetTouches | TouchList | 与目标元素关联的触点集合,触点取消后长度为 0 |
| changedTouches | TouchList | 本次被系统取消的触点集合(长度为触点数量,示例为 1) |
| sourceCapabilities | InputDeviceCapabilities | 含 firesTouchEvents: true |
| view | Window | 触发事件的窗口对象 |
可通过 event.changedTouches.item(0) 或 event.changedTouches[0] 访问第一个被取消的触点。
Touch 对象属性
| 属性名 | 类型 | 说明 |
| identifier | Number | 唯一标识符 |
| target | Element | 触点目标元素(示例为 div#testArea) |
| clientX | Number | 取消瞬间相对于视口的 X 坐标 |
| clientY | Number | 取消瞬间相对于视口的 Y 坐标 |
| pageX | Number | 取消瞬间相对于页面的 X 坐标 |
| pageY | Number | 取消瞬间相对于页面的 Y 坐标 |
| screenX | Number | 取消瞬间相对于屏幕的 X 坐标 |
| screenY | Number | 取消瞬间相对于屏幕的 Y 坐标 |
| force | Number | 触点压力,实测为 1 |
| radiusX | Number | 触点水平半径 |
| radiusY | Number | 触点垂直半径 |
| rotationAngle | Number | 触点椭圆的旋转角度 |
示例代码
// 定义触点失效事件处理函数(最简示例)
function handleTouchCancel(event) {
console.log('touchcancel event:', event)
// 常见:查看第一个被系统取消的触点(Touch)
const firstCancelled = event?.changedTouches?.[0]
console.log('first cancelled touch:', firstCancelled)
}
// 注册与移除监听(需要相同函数引用)
window.addEventListener('touchcancel', handleTouchCancel, false)
// window.removeEventListener('touchcancel', handleTouchCancel, false)注意事项
- addEventListener 和 removeEventListener 必须使用同一个函数引用才能正确移除监听
- 如果使用匿名函数作为回调,将无法通过 removeEventListener 移除监听
- touchcancel 事件在触摸操作被系统中断时触发,通常需要在此事件中清理触摸相关的状态
- 支持多点触摸,touches/targetTouches 为 TouchList,包含所有当前仍在屏幕上的触摸点(被取消的触摸点不在其中)
- changedTouches 为 TouchList,包含本次事件中被取消的触摸点
- touchcancel 事件中的坐标是触摸被取消时的最后位置
- 常见的触发场景:来电、系统弹窗、应用切换到后台、触摸操作超出有效区域等
- 建议在 touchcancel 事件中执行与 touchend 类似的清理操作,以确保应用状态的一致性