Famo.us' Fastclick'在移动设备上点击两次

时间:2014-06-03 16:40:56

标签: javascript ios javascript-events mobile-safari famo.us

我正在使用Famo.us的Fastclick,要求它位于我的一个主视图的顶部,如下所示:

 var FastClick = require('famous/inputs/FastClick');

在iOS7 Safari和Chrome中,Fastclick可以消除300毫秒的延迟,但当我点击一个表面去除"覆盖"来自DOM的表面(例如,后退按钮),两个表面 - 被移除的表面和新表面 - 接收单击事件。因此,例如,如果我单击覆盖表面上的后退按钮,并且在其下方的表面上有一个后退按钮,则两个后退按钮都将触发并移除两个表面。

当我删除FastClick时,问题解决了,但300ms延迟返回。

我已经在桌面上检查了问题,即使FastClick存在,也没有发生。我还在console.log中点击了点击事件,他们只会触发一次。这表明,在移动设备上,问题是由于我的手指在覆盖"覆盖后仍然在玻璃上。表面从DOM中删除。

关于如何解决的任何想法?

2 个答案:

答案 0 :(得分:1)

想出如何防止这种情况。

this.buttonSurface.on('click', function(e){
    if(e.detail != null) return false;
}.bind(this));

答案 1 :(得分:0)

我遇到了一个菜单按钮的确切问题,当点击它时会带来一个非画布菜单,其中有一个按钮就在第一个菜单按钮的位置。两个项目都会收到点击或"点击"在iOS上但不在Android上(而不是在任何桌面浏览器中)。浪费了几个小时试图让Famo.us快速点击工作,因为正如你所说,当你禁用它时,菜单按预期工作,但最终会有300毫秒的延迟。

我最终使用原来的快速点击。 在我的bower.json中:

"dependencies": {
    "requirejs": "~2.1.11",
    "almond": "~0.2.9",
    "famous-polyfills": "git+https://github.com/Famous/polyfills.git#0.1.1",
    "famous": "~0.2.1",
    "fastclick": "1.0.2"
  }

在我的主应用文件中:

var FastClick     = require('fastclick');

...在init期间:

FastClick.attach(document.body);