我正在编写一个高度响应的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单击
这证实了我的理论,即双击等待第三次点击,但我认为没有选项可以禁用此功能。
答案 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);
这改善了我们的“点击性能”。