双击识别时间太长? (Hammer.js 2.0)

Double tap recognition takes too long? (Hammer.js 2.0)

我正在编写一个高度响应的 Web 应用程序,遇到了大多数时间用于识别双击的问题。

我正在使用网站上的代码:

var singleTap = new Hammer.Tap({ event: 'singletap' });
var doubleTap = new Hammer.Tap({event: 'doubletap', taps: 2 });

hammer.add([doubleTap, singleTap]);
doubleTap.recognizeWith(singleTap);
singleTap.requireFailure(doubleTap);

这基本上工作得很好。但是,由于 timeouts/intervals 双击的识别需要相当长的时间 "long"。我猜它大约是间隔的 2 倍——每次点击一次。

在我的场景中,等待最后一个间隔(等待第三次点击)毫无意义。 有没有 "ok tapCount == 2, we fire now and don't wait any longer"-TapRecognizer 选项?

更新,我做了一些记录:

第一列:自第一个事件以来已过去 ms

-

这证实了我的理论,即双击正在等待第三次点击,但我认为没有禁用它的选项。

我们 运行 遇到了类似的缓慢问题。显然,触摸设备上的点击操作存在固有延迟。

我们最终使用了 FastClick

您只需FastClick.attach(document.body); 这为我们改进了"tap performance"。

我分享我对问题的解决方法:

我复制了 TapRecognizer 并将其命名为 DblTapRecognizer。有趣的源代码行是:

if (tapCount === 0) {
    // no failing requirements, immediately trigger the tap event
    // or wait as long as the multitap interval to trigger
    if (!this.hasRequireFailures()) {
        return STATE_RECOGNIZED;
    } else {
        this._timer = setTimeoutContext(function() {
            this.state = STATE_RECOGNIZED;
            this.tryEmit();
        }, options.interval, this);
        return STATE_BEGAN;
    }
}

"if (!this.hasRequireFailures())" 在我的情况下似乎行为不当,因为评论暗示会立即触发...所以只需 "return STATE_RECOGNIZED;" 并删除 DblTapRecognizer 的其余部分。