2017-10-18 70 views
0

我不能使用事件dblClick我只能将事件侦听器添加到click事件。
是否有可能通过仅注册单击事件来检测元素()的双击?
我喜欢添加事件:如何通过注册单击事件来检测元素的双击

for (var i....)... { 
...addEventListener('click', function(event) 
+0

请记住,如果你已经看到了在快速连续点击两次? –

+2

我不确定你为什么不能使用dblclick ..它对我来说就像是一种肮脏的解决方案,但是你可以跟踪点击事件是否在特定时间内被触发两次。例如:200-500 ms – teldri

+1

_“我无法使用事件'dblClick'”_为什么?这实际上是你应该使用的。 – Cerbrus

回答

0

在不可能使用双击事件侦听器的情况下,你可以尝试用最后点击标志和超时检查,如果接下来点击发生在较短的时间内。如果发生,那就是双击信号。事情是这样的:

var dblClickCheck = false; 
var timeout; 

element.addEventListener('click', function() { 

    if(timeout){ 
     clearTimeout(timeout); 
    } 

    if(dblClickCheck){ 
     alert('double click'); 
     return; 
    } 

    dblClickCheck = true; 

    timeout = setTimeout(function() { 
     dblClickCheck = false; 
    }, 200); 

}, false); 

你需要设置的setTimeout延迟根据你自己的情况

0

这会,但工作,你可以调整你的超时时间,以满足您的需求。

function makeDoubleClick(doubleClickCallback, singleClickCallback) { 
 
    var clicks = 0, timeout; 
 
    return function() { 
 
     clicks++; 
 
     if (clicks == 1) { 
 
      singleClickCallback && singleClickCallback.apply(this, arguments); 
 
      console.log('single click'); 
 
      timeout = setTimeout(function() { clicks = 0; }, 400); 
 
     } else { 
 
      timeout && clearTimeout(timeout); 
 
      console.log('double click'); 
 
      doubleClickCallback && doubleClickCallback.apply(this, arguments); 
 
      clicks = 0; 
 
     } 
 
    }; 
 
} 
 

 
document.getElementById('btn').addEventListener('click', makeDoubleClick(), false);
<button id='btn'> 
 
    Click Me 
 
</button>

0

下面的代码添加一个事件侦听到云后300毫秒离开按钮。因此,在300毫秒内没有按下按钮两次时,内部功能不会触发。

var button = document.getElementById("dbl_click"); 
 

 
var outerFunction = function(event) { 
 
    button.addEventListener('click', innerFunction); 
 
    setTimeout(function(){ button.removeEventListener('click', innerFunction) }, 300); 
 
}; 
 

 
var innerFunction = function(event) { 
 
    alert("double clicked!"); 
 
} 
 

 
button.addEventListener('click', outerFunction);
<div> 
 
<button id="dbl_click">Double click me!</button> 
 
</div>