【问题标题】:Binding events with Hammer.js and .on()使用 Hammer.js 和 .on() 绑定事件
【发布时间】:2012-11-21 10:43:17
【问题描述】:

Hammer.js 为我的 Web 应用程序添加了 javascript 触摸和手势支持。我的问题在于将 .hammer() 与 .ajax() 调用文档准备好的之前不存在的 DOM 元素一起使用。

以前,我使用过类似的东西:

$('#parent').on('click', '.child', function(e){
    $(this).hammer()...
});

但是,我需要能够在不调用 .on() 的情况下将事件与 Hammer 绑定,因为 .on() 事件类型与 Hammer 事件类型不匹配。感谢您提供任何帮助 - 我绝不是 jQuery 天才,也不是非常熟悉事件绑定。

【问题讨论】:

  • 您可能可以使用自定义事件 - fuelyourcoding.com/…
  • Hammer 已经是一个自定义事件库。我的问题是将 Hammer 事件绑定到 .ajax()-created 元素。我的活动需要活动吗?
  • 我在 Hammer 文档网站上找到了一些代码,您应该可以将 bind() 更改为 on() - $("#element") .hammer({ // options... } ) .bind("tap", function(ev) { console.log(ev); });
  • 按照这个逻辑,我尝试了$('#parent').hammer().on('drag', '.child', function(ev) { console.log(ev); });,但没有成功。你是这么想的吗?
  • 是的,类似的东西。我最近在一个项目中使用了hammer,但不必担心绑定动态(Ajax)加载的内容。您可能还想查看 $.getScript()

标签: jquery web-applications touch


【解决方案1】:

试试 toe.js

Hammer.js 启发的库是 toe.js,它使用 jQuery 特殊事件 API,其中 Hammer.js 使用自定义实现。

因此,无需对您的元素进行任何进一步的初始化,您应该能够像这样使用它:

$('#parent').on('tap', '.child', function(e){
  // ... Do something
});

我已切换到 toe.js,因为backbone.js 使用标准的 jQuery 事件 API。

【讨论】:

  • 感谢您的建议,toe.js 帮了我很多!我用它来将触摸事件侦听器绑定到移动 Safari 上的图像地图区域,Hammer.js 不能用于此目的。
【解决方案2】:

查看jquery.hammer.js 源,您应该没有问题委派事件。

$("#parent").on("doubletap",".child",dostuff);

只需确保在将元素添加到页面时调用 .hammer()

【讨论】:

  • 结合 Kevin 和 Jay 的建议,我能够让它工作,但 Hammer 中的传播/父子冒泡问题对我来说太多了。我要试试jGestures。谢谢你们。
猜你喜欢
  • 1970-01-01
  • 2013-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多