我使用HammerJS来处理手势。我有一个div
元素(锤子管理事件),其中包含select
。在触摸设备中,或在device mode
镀铬开发工具上,我只需点击并通过触摸和平移移动整个div
即可打开选择,我甚至可以拖动整个事物select
元素。 (这是我的预期行为)。
另一方面,使用鼠标时。只要我点击select
,它就会打开。所以,我无法拖动元素。
在这两个设备中,似乎事件通过冒泡到达Hammer,因为它正在等待包含div
的它们。但差异似乎是点击(点击?)并在触摸设备上拖动并不会触发 mousedown 事件,只会点击。
浏览器的行为是否可以像触摸设备一样,允许我通过按住div
来拖动我的select
,并且仍然可以在点击时展开它?
是否有关于该事件的任何信息可以帮助区分这两者?
我是否侧身看着它?我是HammerJS的新手。
我尝试了什么?
在select
上收听 mousedown 事件,阻止默认行为,让事件冒泡并尝试在点击事件(eventmanager)上强制打开select
。但似乎根本不能,建议here的方法不起作用。
答案 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。