HmmerJS - 使mousedown在浏览器和触摸设备上保持一致

时间:2015-11-24 19:42:00

标签: javascript browser cross-browser touch hammer.js

我使用HammerJS来处理手势。我有一个div元素(锤子管理事件),其中包含select。在触摸设备中,或在device mode镀铬开发工具上,我只需点击并通过触摸和平移移动整个div即可打开选择,我甚至可以拖动整个事物select元素。 (这是我的预期行为)。

另一方面,使用鼠标时。只要我点击select,它就会打开。所以,我无法拖动元素。

在这两个设备中,似乎事件通过冒泡到达Hammer,因为它正在等待包含div的它们。但差异似乎是点击(点击?)并在触摸设备上拖动并不会触发 mousedown 事件,只会点击。

浏览器的行为是否可以像触摸设备一样,允许我通过按住div来拖动我的select,并且仍然可以在点击时展开它?

是否有关于该事件的任何信息可以帮助区分这两者?

我是否侧身看着它?我是HammerJS的新手。

我尝试了什么?

select上收听 mousedown 事件,阻止默认行为,让事件冒泡并尝试在点击事件(eventmanager)上强制打开select 。但似乎根本不能,建议here的方法不起作用。

1 个答案:

答案 0 :(得分:1)

我能够通过有条件地阻止mousedown事件的默认行为,并让它冒泡到hammerJS Tap处理程序来实现所需的一致性。

var someCondition = false;

function preventDefaultWithCondition (ev) {
    if (someCondition) {
        someCondition = false;
        ev.stopPropagation();
        return;
    }

    // Otherwise prevent the default behavior
    ev.preventDefault();
    this.blur();
    window.focus();
}

然后在Tap事件处理程序:

function onTap (ev) {
   if (ev.target.tagName === 'SELECT') {
      someCondition = true;
      /* Trigger the mousedown event programmatically on the select. */
   }
}

我用mousedown

描述了用于触发C事件的技术

一般的想法是,无论选择是否公开,最终决定是否最终委托给HammerJS。