2013-02-15 121 views
4

我有一個使用觸摸屏的JavaScript的Web應用程序,瀏覽器是基於WebKit。觸摸屏和Javascript DOM mousedown事件

我有這樣一個問題:

addEventListener("mousedown", function(event){ 
    console.log('down fired'); 
    event.target.classList.add('down'); 
}, true); 

當使用鼠標時,目標元件類別立即加入當鼠標被按下,但使用觸摸屏時,目標元素類是不手指握在元件上時改變。

奇怪的是但是,控制檯日誌消息在關閉事件發送兩個鼠標點擊和TS按。

如何解決這個任何建議?

感謝

編輯

我加入了touchstart事件偵聽器,但它不火的觸摸事件:

addEventListener("touchstart", function(event){ 
    cl('touch fired'); 
}, true); 

回答

1

雖然一般的觸摸設備不發送鼠標事件如預期,還有觸摸屏的特殊事件。具體而言,'touchstart'等同於'mousedown','touchend'/'touchcancel'等同於'mouseup'。如果您沒有檢查按鈕或位置是否被觸摸,您通常可以直接替換它們。

順便說一句,touchend意味着用戶停止觸摸屏幕。 touchcancel發生在攔截觸摸事件(如非瀏覽器警報)時發生。

+0

謝謝,我增加了觸摸事件,但不會觸發上的觸摸,但問題不在於該事件不被認可,它是公認的控制檯記錄事件,但任何其他操作不出現被解僱! – crankshaft 2013-02-15 02:56:48

+0

如果console.log有效,但不是您自己的處理程序,我想知道您的移動設備是否存在問題,但它不會向您報告。如果你用一些簡單的東西替換你的動作,alert('Test');,這是否會通過? – 2013-02-15 03:16:20

+1

嗨,謝謝,這不是一個移動設備,它是一個嵌入式Linux運行arch linux和midori網頁瀏覽器。觸摸屏硬件是microchip mtouch,沒有驅動程序,它被O/S識別爲HID鼠標,我認爲這就是觸摸事件無法識別的原因。是否有可能打破mosuedown事件? – crankshaft 2013-02-15 03:30:14

3

使用touchstart和touchend事件來代替。

addEventListener("touchstart", function(event){ 
    console.log('down fired'); 
    event.target.classList.add('down'); 
}, true); 
9

太晚,但是也許別人可以使用它:

event.target不會對觸摸屏的工作,因爲你可以使用超過1個手指,所以有更多的目標:

addEventListener("mousedown", function(event){ 
    console.log('down fired'); 
    var t = /touch/.test(event.type) ? event.targetTouches[0] : event.target; 
    t.classList.add('down'); 
}, true);