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

时间:2015-01-05 13:05:52

标签: hammer.js

我正在编写一个高度响应的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);

这基本上很好用。但是,由于超时/间隔,双击的识别需要相当长的时间。我猜它大约是间隔的2倍 - 每次敲击一次。

等待最后一个间隔(等待第三次点击)在我的场景中毫无意义。 有没有“ok tapCount == 2,我们现在开火,不要再等了”-TapRecognizer选项?

更新,我做了一些日志记录:

第一列:自第一个事件以来传递了ms

  • 0输入:mousedown

  • 74ms输入:mouseup

  • 145ms输入:mousedown

  • 218ms输入:mouseup

  • 520ms双击

-

  • 0输入:mousedown

  • 64ms输入:mouseup

  • 366ms单击

这证实了我的理论,即双击等待第三次点击,但我认为没有选项可以禁用此功能。

2 个答案:

答案 0 :(得分:1)

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

我复制了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())"似乎在我的情况下行为不端,因为评论暗示立即解雇......所以只是"返回STATE_RECOGNIZED;"并删除DblTapRecognizer的其余部分。

答案 1 :(得分:0)

我们遇到了类似的缓慢问题。显然,触控设备的敲击操作存在固有的滞后性。

我们最终使用FastClick

您需要做的就是FastClick.attach(document.body); 这改善了我们的“点击性能”。