js怎样实现手势识别功能 移动端手势识别的4种实现方案

移动端手势识别可通过四种方案实现。1.原生touch事件,灵活但代码量大且需处理兼容性;2.hammer.js库使用简单但增加体积;3.pointer events api标准化但兼容性差;4.web components封装组件化逻辑。选择时应根据项目复杂度、性能、兼容性及开发效率权衡。优化性能可通过减少监听、使用requestanimationframe、节流和避免主线程阻塞。处理冲突可stoppropagation、preventdefault或定义优先级。测试应结合真机、模拟器和单元测试。

js怎样实现手势识别功能 移动端手势识别的4种实现方案

移动端手势识别,简单来说,就是让你的 JavaScript 代码能“看懂”用户在屏幕上划拉、捏合等动作,并根据这些动作做出相应的反应。实现方式有很多,但目标都是让你的 Web 应用或混合应用更具交互性。

js怎样实现手势识别功能 移动端手势识别的4种实现方案

js实现手势识别功能,移动端手势识别的4种实现方案:

js怎样实现手势识别功能 移动端手势识别的4种实现方案

方案一:原生 touch 事件

这是最基础的方式,直接监听 touchstart、touchmove、touchend 和 touchcancel 这四个 touch 事件。你需要自己计算手指移动的距离、方向、速度等,然后判断是什么手势。

js怎样实现手势识别功能 移动端手势识别的4种实现方案

优点: 灵活,完全掌控,可以实现各种复杂的手势。

缺点: 代码量大,需要处理各种边界情况,容易出错,兼容性问题也需要考虑。例如,不同设备的 touch 事件坐标可能存在差异。

示例代码:

let startX, startY;document.addEventListener('touchstart', (e) => {  startX = e.touches[0].clientX;  startY = e.touches[0].clientY;});document.addEventListener('touchmove', (e) => {  const x = e.touches[0].clientX;  const y = e.touches[0].clientY;  const deltaX = x - startX;  const deltaY = y - startY;  // 根据 deltaX 和 deltaY 判断手势方向  if (Math.abs(deltaX) > Math.abs(deltaY)) {    if (deltaX > 0) {      console.log('向右滑动');    } else {      console.log('向左滑动');    }  } else {    if (deltaY > 0) {      console.log('向下滑动');    } else {      console.log('向上滑动');    }  }});document.addEventListener('touchend', (e) => {  // 处理 touchend 事件});

方案二:使用 Hammer.js

Hammer.js 是一个流行的手势识别库,它封装了 touch 事件的处理,提供了更高级的手势识别功能,例如 swipe、pinch、rotate 等。

优点: 使用简单,功能强大,跨平台兼容性好。

缺点: 引入第三方库,会增加项目体积。

示例代码:

const element = document.getElementById('myElement');const hammer = new Hammer(element);hammer.on('swipeleft', function(ev) {  console.log('向左滑动');});hammer.on('swiperight', function(ev) {  console.log('向右滑动');});hammer.get('pinch').set({ enable: true });hammer.get('rotate').set({ enable: true });hammer.on("pinch", function(ev) {  console.log(ev.scale); // 缩放比例});hammer.on("rotate", function(ev) {  console.log(ev.rotation); // 旋转角度});

方案三:使用 Pointer Events API

Pointer Events API 是 W3C 标准,旨在统一处理鼠标、触摸和笔等输入设备。相比 touch 事件,它更通用,也更易于使用。

优点: 标准化,易于使用,可以处理多种输入设备。

缺点: 兼容性不如 touch 事件好,需要 polyfill。

示例代码:

element.addEventListener('pointerdown', (e) => {  // 处理 pointerdown 事件});element.addEventListener('pointermove', (e) => {  // 处理 pointermove 事件});element.addEventListener('pointerup', (e) => {  // 处理 pointerup 事件});

方案四:使用 Web Components

可以封装一个 Web Component,将手势识别的逻辑封装在组件内部,对外提供简单的 API。

优点: 组件化,易于复用,代码结构清晰。

缺点: 需要学习 Web Components 的相关知识。

示例代码:

class GestureRecognizer extends HTMLElement {  constructor() {    super();    this.attachShadow({ mode: 'open' });    this.shadowRoot.innerHTML = `              :host {          display: block;        }            
`; this.startX = 0; this.startY = 0; this.addEventListener('touchstart', this._handleTouchStart); this.addEventListener('touchmove', this._handleTouchMove); this.addEventListener('touchend', this._handleTouchEnd); } _handleTouchStart(e) { this.startX = e.touches[0].clientX; this.startY = e.touches[0].clientY; } _handleTouchMove(e) { const x = e.touches[0].clientX; const y = e.touches[0].clientY; const deltaX = x - this.startX; const deltaY = y - this.startY; // 根据 deltaX 和 deltaY 判断手势方向 if (Math.abs(deltaX) > Math.abs(deltaY)) { if (deltaX > 0) { this.dispatchEvent(new CustomEvent('swipeRight')); } else { this.dispatchEvent(new CustomEvent('swipeLeft')); } } else { if (deltaY > 0) { this.dispatchEvent(new CustomEvent('swipeDown')); } else { this.dispatchEvent(new CustomEvent('swipeUp')); } } } _handleTouchEnd(e) { // 处理 touchend 事件 }}customElements.define('gesture-recognizer', GestureRecognizer);

使用:

  
This is the content
const gestureElement = document.getElementById('myGestureElement'); gestureElement.addEventListener('swipeLeft', () => { console.log('Gesture: Swipe Left detected on Web Component!'); });

如何选择合适的手势识别方案?

项目复杂度: 如果项目只需要简单的手势识别,例如 swipe,可以使用 Hammer.js 或 Pointer Events API。如果需要实现复杂的手势,例如自定义手势,建议使用原生 touch 事件。性能要求: 原生 touch 事件的性能最高,但需要自己优化。Hammer.js 的性能也不错,但需要注意配置,避免不必要的手势识别。兼容性要求: touch 事件的兼容性最好,Pointer Events API 需要 polyfill。开发效率: Hammer.js 和 Web Components 可以提高开发效率。

如何优化手势识别的性能?

减少事件监听: 只监听需要的手势事件。使用 requestAnimationFrame: 在 touchmove 事件中,使用 requestAnimationFrame 来更新 UI,避免卡顿。节流: 对 touchmove 事件进行节流,避免频繁计算。避免阻塞主线程: 将耗时的计算放在 Web Worker 中进行。

如何处理手势冲突?

stopPropagation: 阻止事件冒泡,避免父元素也响应手势。preventDefault: 阻止默认行为,例如滚动。使用手势优先级: 定义手势的优先级,优先处理优先级高的手势。

如何测试手势识别功能?

使用真机测试: 模拟真实用户的手势操作。使用模拟器测试: 使用 Chrome DevTools 的模拟器来模拟 touch 事件。编写单元测试: 针对手势识别的逻辑编写单元测试。

以上就是js怎样实现手势识别功能 移动端手势识别的4种实现方案的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1507526.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
js中如何用高阶函数处理条件逻辑
上一篇 2025年12月20日 04:33:12
JS怎么监听系统音量变化 5个音频API捕获设备音量调整
下一篇 2025年12月20日 04:33:24

相关推荐

  • 在Java中实现ANSI颜色输出:解决CMD终端兼容性问题

    在Java中实现ANSI颜色输出:解决CMD终端兼容性问题在Java中实现ANSI颜色输出:解决CMD终端兼容性问题在Java中实现ANSI颜色输出:解决CMD终端兼容性问题在Java中实现ANSI颜色输出:解决CMD终端兼容性问题

    本文深入探讨了Java程序在Windows CMD终端中无法正确显示ANSI颜色代码的原因,并提供了两种有效的解决方案。首先,介绍通过外部命令cmd /c echo实现跨版本兼容的着色输出;其次,针对Java 22及更高版本,详细讲解如何利用Foreign Function & Memory…

    2026年9月27日 • 用户投稿
    000
  • Epic喜加二!田园养蛙模拟器与神秘学解谜游戏

    Epic喜加二!田园养蛙模拟器与神秘学解谜游戏Epic喜加二!田园养蛙模拟器与神秘学解谜游戏Epic喜加二!田园养蛙模拟器与神秘学解谜游戏Epic喜加二!田园养蛙模拟器与神秘学解谜游戏

    epic本周免费游戏已正式揭晓!本期将免费赠送轻松治愈的种田模拟游戏《kamaeru: a frog refuge》以及充满神秘氛围的解谜作品《奇异园艺》!而下周的福利则包括多人竞速游戏《make way》和经典手绘风冒险解谜游戏《机械迷城 (machinarium)》。 立即领取《Kamaeru:…

    2026年9月27日 • 用户投稿
    000
  • 苹果系统模拟器

    苹果系统模拟器苹果系统模拟器苹果系统模拟器苹果系统模拟器

    苹果系统模拟器可以在非苹果设备上模拟苹果操作系统,用于开发和测试、跨平台体验和创建虚拟机。其中,Parallels Desktop、VMware Fusion、VirtualBox 和 UTM 是最流行的苹果系统模拟器。选择时需考虑支持的操作系统、兼容性、性能和价格等因素。 苹果系统模拟器 苹果系统…

    2026年9月26日 • 用户投稿
    000
  • 《流放之路2》国服98元起 9月11日开启不删档测试

    《流放之路2》国服98元起 9月11日开启不删档测试《流放之路2》国服98元起 9月11日开启不删档测试《流放之路2》国服98元起 9月11日开启不删档测试《流放之路2》国服98元起 9月11日开启不删档测试

    《流放之路2》国服名为《流放之路:降临》,定价从98元起,豪华版分为四个档次,价格区间为198元至798元,另有典藏版售价2888元。目前游戏已在腾讯wegame平台开启预购,国服预充值不删档测试定于2025年9月11日正式开启! 98元“基础创始人资格包”包含9800点券、测试资格以及数字原声带。…

    2026年9月26日 • 用户投稿
    500
  • 如何在Android应用中加入AI功能 Android集成ML Kit的完整教程

    如何在Android应用中加入AI功能 Android集成ML Kit的完整教程如何在Android应用中加入AI功能 Android集成ML Kit的完整教程如何在Android应用中加入AI功能 Android集成ML Kit的完整教程如何在Android应用中加入AI功能 Android集成ML Kit的完整教程

    创建firebase项目并接入android应用:注册应用到firebase控制台,下载配置文件并添加google服务插件。2. 引入ml kit依赖:根据所需功能在build.gradle中添加对应依赖。3. 使用ml kit进行图像处理:以文字识别为例,获取图片、转为inputimage对象、初…

    2026年9月25日 • 用户投稿
    800
  • 使用 Appium 实现 Gmail OTP 验证自动化

    使用 Appium 实现 Gmail OTP 验证自动化使用 Appium 实现 Gmail OTP 验证自动化使用 Appium 实现 Gmail OTP 验证自动化使用 Appium 实现 Gmail OTP 验证自动化

    本文档旨在指导开发者如何使用 Appium 自动化测试移动应用中的 Gmail OTP (One-Time Password) 验证流程。我们将探讨如何通过 Appium 定位 OTP 输入框,并使用获取到的 OTP 值进行输入,从而完成验证流程的自动化。 定位 OTP 输入框 在 Appium 中…

    2026年9月24日 • 用户投稿
    500
  • Steam新游周报:经典恐怖游戏新作登场!

    Steam新游周报:经典恐怖游戏新作登场!Steam新游周报:经典恐怖游戏新作登场!Steam新游周报:经典恐怖游戏新作登场!Steam新游周报:经典恐怖游戏新作登场!

    十一国庆前的最后一周,Steam上又有许多令人兴奋的新作发布!本周策略玩家与模拟建设玩家有福了,将有数款新作等着你们,体育爱好者们则能玩到EA一款足球年货游戏,而本周黑马则是一款来自科乐美的经典日式恐怖游戏。让我们进入这周的新游周报吧! 周一(9月22日) 名望(抢先体验) Steam商店页面:名望…

    2026年9月24日 • 用户投稿
    100
  • 行业首款风水双冷手机 红魔11 Pro系列真机开箱:酷炫水冷环、唯一纯平后盖

    行业首款风水双冷手机 红魔11 Pro系列真机开箱:酷炫水冷环、唯一纯平后盖行业首款风水双冷手机 红魔11 Pro系列真机开箱:酷炫水冷环、唯一纯平后盖行业首款风水双冷手机 红魔11 Pro系列真机开箱:酷炫水冷环、唯一纯平后盖行业首款风水双冷手机 红魔11 Pro系列真机开箱:酷炫水冷环、唯一纯平后盖

    10月13日,红魔正式宣布其新款旗舰手机——红魔11 pro系列将于10月17日发布,这款机型将成为全球首款融合风冷与水冷双重散热技术的智能手机。 今天,红魔游戏手机官方首次展示了红魔11 Pro系列的真机开箱画面。新机共推出四种配色方案:氘锋透明暗夜、氘锋透明银翼、暗夜骑士以及银翼战神,满足不同用…

    2026年9月24日 • 用户投稿
    400
  • 大疆Avata 2对决DJI FPV:新手入坑穿越机,谁的安全性操控与画质更能让你畅享飞行乐趣?

    Avata 2更适合新手,因其支持体感操控、具备全方位避障、一键花飞和更强影像系统,操作简单且安全;而DJI FPV需手动操控,无避障,上手难度高,适合进阶玩家。 选大疆Avata 2还是DJI FPV,对新手来说差别很明显。Avata 2从设计到功能都更照顾飞行新人,能让你更快享受第一视角的乐趣,…

    2026年9月23日
    100
  • VSCode如何实现数字考古编程 VSCode历史文献数字化处理方法

    vscode之所以成为数字考古与历史文献处理的理想工具,首先在于其高度可定制性和强大的扩展生态,能通过安装语言支持扩展应对fortran、汇编等古老编程语言及xml/tei等历史文献格式,提供语法高亮与基础智能提示;2. 其集成终端支持运行python、r等脚本语言,便于批量处理ocr文本、执行数据…

    2026年9月23日
    300
  • 如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程

    如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程如何使用TensorFlowLite训练AI大模型?移动端模型优化的教程

    TensorFlow Lite通过模型转换、量化、剪枝等优化手段,将训练好的大模型压缩并加速,使其能在移动端高效推理。首先在服务器端训练模型,随后用TFLiteConverter转为.tflite格式,结合量化(如Float16或全整数量化)、量化感知训练、剪枝和聚类等技术减小模型体积、提升运行速度…

    2026年9月23日 • 用户投稿
    100
  • VSCode高效配置Elixir:Phoenix框架、中文提示、模式匹配

    要高效配置vscode支持elixir开发,必须安装elixirls扩展并确保elixir和erlang环境正确;elixirls提供代码补全、跳转、格式化和调试功能,配合手动设置.heex、.leex文件关联为html可优化phoenix框架开发体验;通过安装中文语言包、设置files.encod…

    2026年9月23日
    200
  • 如何设置Linux用户会话超时 TMOUT环境变量详细配置

    如何设置Linux用户会话超时 TMOUT环境变量详细配置如何设置Linux用户会话超时 TMOUT环境变量详细配置如何设置Linux用户会话超时 TMOUT环境变量详细配置如何设置Linux用户会话超时 TMOUT环境变量详细配置

    tmout是bash shell用于设置用户会话超时的环境变量,单位为秒,常用方法包括:1. 临时设置通过执行export tmout=300仅对当前终端生效;2. 全局设置在/etc/profile中添加export tmout=600需root权限并执行source生效;3. 针对特定用户修改其…

    2026年9月22日 • 用户投稿
    000
  • Swift 3到5.1新特性整理

    tocSwift 5.1Swift 5.0Result类型Raw string自定义字符串插值动态可调用类型处理未来的枚举值从try?抹平嵌套可选检查整数是否为偶数字典compactMapValues()方法撤回的功能: 带条件的计数Swift 4.2CaseIterable协议警告和错误指令动态查…

    2026年9月22日
    100
  • VSCode高效配置Node.js:npm集成、中文报错、断点调试

    答案:高效配置VSCode与Node.js需确保Node.js和npm为最新版,利用集成终端运行命令,通过jsconfig.json或tsconfig.json优化项目配置,解决中文乱码需设置终端编码为UTF-8并选择支持中文的字体,调试核心是正确配置launch.json文件,使用pwa-node…

    2026年9月22日
    500
  • google浏览器开发者工具怎么打开_google浏览器打开开发者工具方法

    1、使用F12或Ctrl+Shift+I快捷键可快速打开开发者工具;2、右键点击页面元素选择“检查”能直接定位HTML节点;3、通过浏览器右上角菜单进入“更多工具”-“开发者工具”也可启动;4、在地址栏输入chrome://inspect可管理远程设备调试并打开对应开发者工具窗口。 如果您在使用 G…

    2026年9月21日
    200
  • Linux命令行如何查看登录用户

    Linux命令行如何查看登录用户Linux命令行如何查看登录用户Linux命令行如何查看登录用户Linux命令行如何查看登录用户

    答案是 who、w 和 users 命令用于查看Linux系统登录用户,其中 who 显示登录用户及终端信息,w 还显示用户正在执行的命令和系统负载,users 仅输出用户名列表。 在Linux命令行下,要查看当前系统上有哪些用户登录,最直接、最常用的命令包括 who 、 w 和 users 。它们…

    2026年9月21日 • 用户投稿
    200
  • 蒙古开放世界游戏试玩获赞:马匹体验比大镖客2还好!

    蒙古开放世界游戏试玩获赞:马匹体验比大镖客2还好!蒙古开放世界游戏试玩获赞:马匹体验比大镖客2还好!蒙古开放世界游戏试玩获赞:马匹体验比大镖客2还好!蒙古开放世界游戏试玩获赞:马匹体验比大镖客2还好!

    由Aesir Interactive与NightinGames联合开发的开放世界新作《The Legend of Khiimori》已在Steam平台上线试玩版本,预计将于明年3月3日正式发售。 近日,国外媒体pcgamesn发布了该游戏的初步体验评测,并给予高度评价:“其骑马机制的表现力甚至超越了…

    2026年9月20日 • 用户投稿
    200
  • 《书店模拟器》攻略——游戏特色内容介绍

    《书店模拟器》攻略——游戏特色内容介绍《书店模拟器》攻略——游戏特色内容介绍《书店模拟器》攻略——游戏特色内容介绍《书店模拟器》攻略——游戏特色内容介绍

    《书店模拟器》(bookshop simulator)是由blep games开发并发行的一款温暖治愈的模拟经营类游戏。游戏中包含丰富的玩法元素,玩家可以通过赚取利润来装修店面、扩展空间,并雇佣店员协助运营。还能收集拥有特殊力量的古老珍本书籍,甚至收养一只猫咪,让它成为你和顾客之间的温馨纽带! 《书…

    2026年9月20日 • 用户投稿
    100
  • Linux怎么查看当前登录用户的信息

    whoami显示当前有效用户,who列出登录用户及终端信息,w还显示活动详情,id则查看用户UID、GID和所属组,不同命令适用于身份确认、在线状态、行为监控和权限分析场景。 在Linux系统里,想知道当前是哪个用户在操作,或者还有谁登录着,其实有几个非常直接的命令可以用。简单来说,最快的是 who…

    2026年9月12日
    200

发表回复

登录后才能评论
关注微信