我在DOM元素上有一个点击监听器(没有jQuery):
element.addEventListener('click', (e) => {
// some code
});
显然,当我单击时,代码将运行并且一切都很好。
问题是,当我双击时,代码运行两次,并且我不希望出现这种情况(当我双击时,我希望它像单击鼠标一样运行一次代码)。
最佳答案
一种可能性是使用Date
检查触发该功能的最后一次单击是否少于1秒:
const element = document.querySelector('div');
let lastClick = 0;
element.addEventListener('click', (e) => {
const thisClick = Date.now();
if (thisClick - lastClick < 1000) {
console.log('quick click detected, returning early');
return;
}
lastClick = thisClick;
console.log('click');
});
<div>click me</div>
如果您希望函数正常运行仅在最后一次单击超过1秒之前运行(而不是最后一次函数正常运行超过一秒钟之前),请对其进行更改,以便将
lastClick
分配给if (thisClick - lastClick < 1000) {
有条件的:const element = document.querySelector('div');
let lastClick = 0;
element.addEventListener('click', (e) => {
const thisClick = Date.now();
if (thisClick - lastClick < 1000) {
console.log('quick click detected, returning early');
lastClick = thisClick;
return;
}
lastClick = thisClick;
console.log('click');
});
<div>click me</div>