使用 Hammer.js 进行事件委托

2024-03-17

我如何在 Hammer.js 中使用纯 JavaScript 进行 jQuery 风格的事件委托?例如。:

Hammer(document).on('tap', '.item', function () {
  console.log('tapped')
})

这是直接可行的还是我必须自己进行委托?


受到乔尔斯回答的启发,这就是我的想法。我并没有费心使用纯 JS 解决方案——事实上,这是为了与Backbone.View,但很容易适应其他情况。

当它到达视图的根元素时,它将停止攀爬节点树(this.el)。从HammerJS事件标识的目标开始,它将寻找与指定选择器匹配的第一个元素,并返回undefined如果没有找到这样的元素。

要在非 Backbone 环境中使用,只需传入对限制/包含元素的引用作为第三个参数(如 Jools 的解决方案中所示)并使用它来替换this.el.

/**
 * @param {Node}target - the target of the received event
 * @param {String}selector - any jQuery-compatible selector
 */
getEventDelegate: function (target, selector) {
     var delegate;
     while (target && target != this.el) {
        delegate = $(target).filter(selector)[0];
        if (delegate) {
           return delegate;
        }
        target = target.parentNode;
     }
     return undefined;
  }

如果你有一个onTap回调函数,它可能看起来像这样:

/**
 * @param {Event}ev
 */
onTap: function (ev) {
   var target = this.getEventDelegate(ev.target, "#desiredTarget");
   if (target) {
      // TODO something with the target...
   }
}

为了把这一切连接起来,你需要这样的东西......

this._hammer = new Hammer(this.el);
this._hammer.on('tap', _.bind(this.onTap, this));

(并且不要忘记打电话this._hammer.destroy()当你的视野被摧毁时!)

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

使用 Hammer.js 进行事件委托 的相关文章

随机推荐

  • 从 Java 列表生成 p:tabs

    我想从 Java 列表创建 Primefaces 选项卡 我测试了这段代码
  • 在 mysql 更新查询中查找受影响的字段

    我这里有一个复杂的问题 假设我的表中有 5 个字段 而我的一个用户在运行 mysql 更新查询的表单的帮助下仅更新了 2 个字段 那么有什么办法可以查出哪两个字段被改变了 好吧 我不确定这是否是最好的方法 但它会起作用 请注意 语法适用于
  • 将通用列表数组绑定到 GridView

    您好 我有一个返回 问题 数组的列表 我的问题是如何将其绑定到网格视图 当我尝试调用 Question Ordinal 时 我发现它在数据源中不存在 我正在使用以下代码 GridView1 DataSource myList GetQ Gr
  • 堆栈在缓存中吗?

    在现代计算机中 我知道当前代码区域位于高速缓存中 然而 在许多计算机语言实现中 本地 自动 变量将位于堆栈上 因此会对堆栈进行大量内存访问 在正常架构中 堆栈是否位于另一个缓存中 如果不是 则假设堆栈可以重新定位到 本地 即非常靠近当前代码
  • chrome 扩展:页面完成加载 javascript 后运行脚本

    当页面完成加载时 这根本不会触发 基本上 当我单击浏览器操作按钮时 它会触发它 并且在页面加载时 它将运行一个脚本 在我的background js中 var toggle false chrome browserAction onClic
  • 如何使用 JMeter 发送动态 URL 参数

    我想将 URL PATH 发送为 controller 1 1 controller 2 2 start 但是参数 2controller 2是动态的 如何发送该参数 使参数成为变量 controller 2 controller2 par
  • 使用 swift for Mac 应用程序获得管理权限

    我正在编写一个软件 需要经常以root权限运行命令 现在 我通过询问用户一次密码 保存密码 然后将该密码提供给NSAppleScript作为参数with administrator privileges 这显然对用户来说确实不安全 因为有人
  • 使用 Obj-C 的帖子发送 amp (&)

    我正在发送包含文本 数字和数据的帖子 数字和数据工作正常 但我在文本方面遇到问题 因为它可能包含与号 例如 page php text Hello World Space 现在我发现 被服务器接收到 但读起来就像一个新变量开始一样 所以它看
  • pyqtdeploy:无法检测到 MSVC2015 或 MSVC2017

    我第一次尝试 pyqtdeploy 遵循文档 https www riverbankcomputing com static Docs pyqtdeploy demo html 运行 build demo py 时出现以下错误 C User
  • 将phoneGap 与本机iOS 应用程序集成

    我正在尝试创建一个使用本机功能和phoneGap 框架组合的应用程序 本机应用程序有一个按钮 单击该按钮后 phoneGap ui 必须添加到视图中 有什么办法可以实现这一点吗 有相同的教程吗 是的 这是可能的 尽管您可能会让自己陷入一些头
  • 如何确定我是否在 Android Wear 中运行?

    我在 Android Studio 中有一个移动和穿戴模块 它们都使用 核心 代码库 在该核心代码中 我如何确定我的代码是否在 移动 模块的 穿戴 上运行 我应该使用屏幕尺寸吗 尽管这没有正式记录 据我所知 您可以通过调用以下任一方法来确定
  • 使用 pyautogui 输入 unicode 字符串

    我正在创建一个自动测试应用程序pyautogui库 我想用typewrite将文本输入到表单中的方法 但我的一些输入字符串中含有 unicode 字符 例如 N st 根据文件typewrite只能按单字符键 所以它只是忽略了 特点 您能建
  • 使用 EC2 + Rails + Nginx + Capistrano 重新启动时 Puma 重新启动失败

    我已成功使用 capistrano 将我的 Rails 应用程序部署到 Ubuntu EC2 部署时一切都运行良好 Rails 应用程序名称是 deseov12 我的问题是 Puma 不会在启动时启动 这是必要的 因为生产 EC2 实例将根
  • 如何为其他类成员函数编写模板包装方法?

    我尝试为具有不同参数的不同函数创建一个模板化包装器 设置是一个类A基本实现有两种方法foo and bar 另一堂课B应包装这些方法并添加新功能 以下链接中的解决方案对于非类函数非常有效 c 11 模板化包装函数 https stackov
  • 如何使用 JavaScript 添加到现有的 dataTransfer.files 对象?

    我正在创建一个拖放文件上传区域 当我一次上传多个文件时 它可以工作 但我需要它能够支持分多个阶段上传 我知道下面的问题是我每次都设置文件 但我无法找出每次调用该方法时将更多文件添加到 dFiles 的正确方法 var dFiles var
  • openssh/opensshportable,我应该从内存中提取哪个密钥?

    我想在 OpenNebula 等虚拟环境中解密 ssh 流量 为此 我从 openssh opensshportable 代码的 key derive keys 函数中提取了 6 个 ssh 密钥 IV 加密密钥和完整性密钥 如果我跟踪服务
  • 如何向 PHP SoapVar 对象添加属性?

    如何向 PHP SoapVar 对象添加属性 PHP5 SoapClient SoapVar 我有一个 SOAP 客户端请求情况 其中有重复的部分 答案 每个部分都有一个问题和选择 这是测验评分过程的一部分 根据我在 PHP5 SOAP 客
  • 如何使用 C# 驱动程序更新 MongoDB 中数组子文档中包含的数组子文档中的字段?

    我在 MongoDB 中有一个文档集合 其结构如下 有多个容器文档 每个包含Sessions 每个会话包含1个Order 每个Order包含多个Item Sessions ID 1882a092 d395 45d1 b36b e2fa3df
  • std::decay 和 std::remove_cvref 之间的区别?

    Does std remove cvref代替std decayC 20之后 From 这个链接 https github com thecppzoo zoo issues 7 我无法理解这意味着什么 C 20将有一个新特征std remo
  • 使用 Hammer.js 进行事件委托

    我如何在 Hammer js 中使用纯 JavaScript 进行 jQuery 风格的事件委托 例如 Hammer document on tap item function console log tapped 这是直接可行的还是我必须