How to Differentiate Single and Double Click Events in JavaScript
I needed a way to detect both single and double clicks on my website.
I used both event listeners below:
document.addEventListener("click", handleClick);
document.addEventListener("dblclick", handleClick);
Unfortunately, the dblclick event handler wouldn’t prevent the click event handler from firing, so every double click was preceded by a single click.
In order to fix this, I removed the dblclick handler completely and began checking for double clicks within the click handler.
let numClicks = 0;
const handleClick = () => {
numClicks++;
if (numClicks === 1) {
singleClickTimer = setTimeout(() => {
numClicks = 0;
console.log("single click!");
}, 400);
} else if (numClicks === 2) {
clearTimeout(singleClickTimer);
numClicks = 0;
console.log("double click!");
}
};
document.addEventListener("click", handleClick);
numClicks is a global count variable for the number of clicks that have occurred so far.
The first click will always trigger the timer singleClickTimer, which runs for 400ms. If a second click happens within that 400ms, then a double click will be registered, and the timer (as well as the callback) will be cleared.
The downside to this approach is that it will always take 400ms to register a single click event.
We can decrease the 400ms to a smaller number to force single clicks to register faster, but this will also force double clicks to be quicker as well.