角锤(ryan mullins fork)可以用'requireFailure`连接识别器吗?

时间:2014-12-10 18:50:12

标签: javascript angularjs hammer.js

在使用angular-hammer的ryan mullins分叉时,我不清楚如何通过requireFailure属性将hmRecognizerOptions多个识别器连接起来......如果可能的话。

我对源代码的细读给我留下了可以做到的印象,但是我对在给定元素上创建识别器的顺序存在问题。

要直接查看问题,请使用现有的默认演示,并添加以下hm-recognizer-options属性,

<div id="target"
  ng-controller="hmCtrl"
  hm-pan="onHammer"
  hm-pinch="onHammer"
  hm-press="onHammer"
  hm-rotate="onHammer"
  hm-swipe="onHammer"
  hm-tap="onHammer"
  hm-doubletap="onHammer"
  hm-recognizer-options='[
  {"type":"pan","requireFailure":"swipe"}
  ]'>
  {{eventType}}
</div>

(另请参阅此plunker:http://embed.plnkr.co/3sJFrC/preview 以及控制台中产生的错误

我希望这会导致只有在滑动失败后才能识别平移。但是,逐步执行代码会发现,当pan试图在requireFailure调用期间引用它时,滑动识别器尚未实例化。

还不清楚这是如何工作的,因为看起来requireFailure(在HammerJS中)也会通过方法结尾附近的otherRecognizer.requireFailure(this)行自动创建反向引用,

/**
 * recognizer can only run when an other is failing
 * @param {Recognizer} otherRecognizer
 * @returns {Recognizer} this
 */
requireFailure: function(otherRecognizer) {
    if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {
        return this;
    }

    var requireFail = this.requireFail;
    otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);
    if (inArray(requireFail, otherRecognizer) === -1) {
        requireFail.push(otherRecognizer);
        otherRecognizer.requireFailure(this);
    }
    return this;
}

简而言之,在调用requireFailure之前,似乎必须先实例化两个识别器,但angular.hammer.js会在创建每个识别器时处理hm-recognizer-options

我在某个地方错过了一个技巧吗? 或者我将创建自己的指令来管理requireFailure(和/或recognWith)连线?

0 个答案:

没有答案