简体   繁体   English

如何通过仅注册click事件来检测双击元素

[英]How to detect double click on element by registering only click event

I can't use event dblClick I can add event listener only to click event. 我不能使用事件dblClick我只能将事件侦听器添加到click事件。
Is it possible to detect double click on element () with registering only click event? 是否可以通过仅注册click事件来检测对元素()的双击?
I add event like: 我添加事件,如:

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

This will work and you can adjust your timeout to suit your needs. 这将起作用,您可以调整超时以适合您的需求。

 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> 

In case of impossibility to use double click event listener, you can try to use last click flag and timeout to check if next click happens in short period of time. 如果无法使用双击事件侦听器,则可以尝试使用“最后点击”标志和超时来检查是否在短时间内发生了下次点击。 If it happens then it is signal of double click. 如果发生,则表示双击。 Something like this: 像这样:

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);

You need to set delay of setTimeout depending on your own situation 您需要根据自己的情况设置setTimeout延迟

The code below adds an event listener to the button that goes away after 300 milliseconds. 下面的代码将事件监听器添加到按钮上,该监听器在300毫秒后消失。 So when the button isn't pressed twice within 300 ms, the inner function doesn't fire. 因此,如果在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> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM