Ни один из этих ответов не удовлетворил мои потребности, поэтому я создал решение, основанное на сути @AdrienSchuler.Используйте это решение только в том случае, если вы хотите привязать один щелчок и двойной щелчок к элементу.В противном случае я рекомендую использовать нативные click
и dblclick
слушатели.
Это различия:
- Vanillajs, нет зависимостей
- Не 't ждать, пока
setTimeout
обработает обработчик щелчка или двойного щелчка - При двойном щелчке он сначала запускает обработчик щелчка, а затем обработчик двойного щелчка
Javascript:
function makeDoubleClick(doubleClickCallback, singleClickCallback) {
var clicks = 0, timeout;
return function() {
clicks++;
if (clicks == 1) {
singleClickCallback && singleClickCallback.apply(this, arguments);
timeout = setTimeout(function() { clicks = 0; }, 400);
} else {
timeout && clearTimeout(timeout);
doubleClickCallback && doubleClickCallback.apply(this, arguments);
clicks = 0;
}
};
}
Использование:
var singleClick = function(){ console.log('single click') };
var doubleClick = function(){ console.log('double click') };
element.addEventListener('click', makeDoubleClick(doubleClick, singleClick));
Ниже приведено использование в jsfiddle, кнопка jQuery - поведение принятого ответа.