2015-11-24 24 views
1

我正在使用HammerJS來處理手勢。我有一個div元素(其中錘子正在管理事件),其中包含select。在觸控設備上,或者在鉻合金開發工具的device mode上,我可以通過輕觸和平移移動整個div來打開選擇,我可以拖動整個東西,即使拿着select元素。 (這是我的預期行爲)。HmmerJS - 使mousedown在瀏覽器和觸摸設備上保持一致

另一方面,當使用鼠標。只要我點擊select,它就會打開。所以,我無法拖動元素。

在這兩個設備中,事件似乎都通過冒泡到達Hammer,因爲它正在等待它們的包含div。但差異似乎是點擊(點擊?)並在觸摸設備上拖動不會觸發事件事件,只能點擊。

是否有可能讓瀏覽器像觸摸設備一樣行事,允許我拖動我的div通過持有select並仍然能夠讓它展開點擊?

有沒有關於事件的任何信息可以幫助區分兩者?

我在看側面嗎?我是HammerJS的新手。

我試過了什麼?

監聽在select鼠標按下事件,防止默認行爲,讓事件的泡沫,並試圖勢在必行打開select水龍頭事件(eventmanager進行)。但似乎一個根本不能,至少, 方法建議 here沒有工作。

回答

1

我能夠通過有條件地防止在mousedown事件的默認行爲,並使其冒泡至hammerJS點擊處理程序,以實現所需的稠度。

var someCondition = false; 

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

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

然後在點擊事件處理程序:

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

我用來觸發mousedown事件的技術描述here

的總體思路是,最終決定是否打開或不選擇最終委託給HammerJS而不管設備。

相關問題