Hammer.js - 支持单击和双击,无延迟

时间:2016-08-15 14:50:31

标签: javascript hammer.js

我正在使用Hummer.js来处理单击和双击,这两种手势都会被延迟几百毫秒的识别。 如此处所示(fiddle)

var hammertime = new Hammer.Manager(containerElement);
hammertime.add(new Hammer.Tap({event: 'doubletap', taps: 2}));
hammertime.add(new Hammer.Tap({event: 'singletap'}));
hammertime.get('singletap').requireFailure('doubletap');
hammertime.on("doubletap", onDoubleTap);
hammertime.on("singletap", onSingleTap);

单击延迟是不可避免的,因为它必须等待以确保实际上不是双击。但是没有理由进行双击延迟。 我可以删除requireFailure设置并处理我自己在此处演示的这种逻辑(fiddle)

var hammertime = new Hammer.Manager(containerElement);
hammertime.add(new Hammer.Tap({event: 'doubletap', taps: 2}));
hammertime.add(new Hammer.Tap({event: 'singletap'}));
//hammertime.get('singletap').requireFailure('doubletap');
hammertime.on("doubletap", onDoubleTap);
hammertime.on("singletap", setupSingleTapTimeout);

function setupSingleTapTimeout() {
    cancelSingleTapTimeout();
    timeoutId = window.setTimeout(onSingleTap, 300);
}

function cancelSingleTapTimeout() {
  if(timeoutId !== null) {
    window.clearTimeout(timeoutId);
    timeoutId = null;
  }
}

function onDoubleTap() {
    cancelSingleTapTimeout();
    ...
}

但我会更加努力保持关注点的分离,并为Hammer留下这样的工作,这也似乎应该知道该怎么做..

有人知道如何用锤子实现这个目标

0 个答案:

没有答案