我有以下设置
function hammerIt(elm) {
hammertime = new Hammer(elm, {});
hammertime.on('tap doubletap pan pinch panstart panend pinchend swipe swipeleft swiperight swipedown swipeup', function(ev) {
// Doesn't work...
var doubletap = hammertime.get('doubletap');
var tap = hammertime.get('tap');
doubletap.recognizeWith(tap);
tap.requireFailure(doubletap);
if (ev.type == 'tap') {
doSomething();
}
if (ev.type == 'doubletap') { // This is never fired....
doSomethingElse();
}
// etc.
}
当我双击元素/单击元素时,将同时触发tap和doubletap事件。我只想触发双击,但以某种方式我的代码不起作用?是因为我使用的是on(events)和.get(“ event name”),而不是像https://hammerjs.github.io/require-failure/中的示例那样的专用事件,还是我遗漏了其他东西?
谢谢约翰·史密斯,根据您的小提琴,我想出了一个可行的解决方案:
function hammerIt(elm) {
hammertime = new Hammer.Manager(elm);
var doubletap = new Hammer.Tap({event: 'doubletap', taps: 2});
var tap = new Hammer.Tap({event: 'tap'});
var pan = new Hammer.Pan();
var pinch = new Hammer.Pinch({enable:true});
var swipe = new Hammer.Swipe();
hammertime.add([doubletap, tap, pan, pinch, swipe]);
hammertime.get('tap').requireFailure('doubletap');
hammertime.on('tap doubletap pan pinch panstart panend pinchend swipe swipeleft swiperight swipedown swipeup', function(ev) {
if (ev.type == 'tap') {
doSomething();
}
if (ev.type == 'doubletap') {
doSomethingElse();
}
// etc.
}
}
我认为问题出在使用“ new Hammer(elem ...”)而不是“ new Hammer.Manager(elem)”。这样,我必须手动添加识别器,而不是使用默认设置,但至少可以使用符合预期:-)