2017-10-19 230 views
1

在JavaScript中出現雙擊事件時存在一些問題。雙擊未觸發事件

我希望能夠快速連續點擊一個元素,但要聽取雙擊。這在技術上是可行的還是我需要點擊一下並聽取它被點擊兩次?

一個codepen示例here

JS也可以在下面找到。

(function() { 

    var el; 
    var count = 0; 
    var counter; 

    function init() { 
    el = document.getElementById('click-me'); 
    counter = document.getElementById('counter'); 

    el.addEventListener('dblclick', onDblClick, false); 
    } 

    function onDblClick(e) { 
    count++; 
    counter.textContent = count; 
    } 

    init(); 

}()); 

看來的東西雙擊後,你需要離開一個短暫的停頓,以使其復位的情況下,也許第二或半秒?

有沒有什麼我失蹤與dblclick事件本身或是我試圖做不可能?

P.S.這隻需要在Webkit/Chrome中工作,因爲這不是針對網站,而是針對遊戲的覆蓋。

+0

我暴怒單擊您codepen並不斷遞增的罰款。您的問題在特定的瀏覽器/設備/輸入法中嗎? – Fenton

+0

@Fenton雖然它起作用,但它有時會失敗(需要3次雙擊),運行在Chrome 61上。 – Adriani6

+0

因此,它看起來像在Edge,IE和Firefox中起作用。我真的需要這樣才能在Chrome/Webkit中工作,因爲這不是專門針對網站的。我會更新我的問題。 – ChronixPsyc

回答

1

像這樣的東西(https://gist.github.com/karbassi/639453):

(function() { 

    var el; 
    var count = 0; 
    var counter; 
    var clickCount = 0; 

    function init() { 
    el = document.getElementById('click-me'); 
    counter = document.getElementById('counter'); 

    el.addEventListener('click', onDblClick, false); 
    } 

    function onDblClick(e) { 

    clickCount++; 
    if (clickCount === 1) { 
     singleClickTimer = setTimeout(function() { 
      clickCount = 0;    
     }, 400); 
    } else if (clickCount === 2) { 
     count++; 
     clearTimeout(singleClickTimer); 
     clickCount = 0; 
     counter.textContent = count; 
    } 
} 
    init(); 

}()); 
+0

謝謝!看起來這是最好的解決方案。 'dblclick'在我使用的Webkit引擎中看起來並不一致。 – ChronixPsyc