双击识别时间太长? (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
0 输入:mousedown
74ms 输入:mouseup
145ms 输入:mousedown
218ms 输入:mouseup
520ms 双击
-
0 输入:mousedown
64ms 输入:mouseup
366ms 单次点击
这证实了我的理论,即双击正在等待第三次点击,但我认为没有禁用它的选项。
我们 运行 遇到了类似的缓慢问题。显然,触摸设备上的点击操作存在固有延迟。
我们最终使用了 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 的其余部分。
我正在编写一个高度响应的 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
0 输入:mousedown
74ms 输入:mouseup
145ms 输入:mousedown
218ms 输入:mouseup
520ms 双击
-
0 输入:mousedown
64ms 输入:mouseup
366ms 单次点击
这证实了我的理论,即双击正在等待第三次点击,但我认为没有禁用它的选项。
我们 运行 遇到了类似的缓慢问题。显然,触摸设备上的点击操作存在固有延迟。
我们最终使用了 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 的其余部分。