2017-10-19 231 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