【发布时间】:2021-07-13 08:55:53
【问题描述】:
我试图通过 javascript 区分 click 和 dblclick 事件。我在dblclick 中尝试了stopPropagation,但是没有用。因此我使用setTimeout 编写了我自己的函数,试图在调用一个函数时避免调用另一个函数。
/* dblclick differ click
takes two functions as param and one element
to bind the event listener on
*/
function cdblclick(click, dblclick, el){
el.cooled = true;
el.addEventListener('click', function(){
if(el.cooled){
setTimeout(function(){
if(!el.cdblc){el.cdblc = 0}
el.cdblc++;
if(el.cdblc === 1){
setTimeout(function(){
if(!el.doubled){
console.log('click')
// click();
el.cdblc = 0;
el.cooled = true;
el.doubled = false;
}
}, 300);
}else if(el.cdblc === 2){
console.log('double')
// dblclick();
el.doubled = true;
el.cdblc = 0;
el.cooled = true;
}else{
}
}, 250);
}
});
}
但是,它不能正常工作。如果你能帮我一把,我会很高兴的。
感谢分到两个元素的建议,但是我必须在同一个元素上实现两个事件
解决方案
感谢所有帮助。
/* dblclick differ click
takes two functions as param and one element
to bind the event listener on
*/
function cdblclick(click, dblClick, el) {
let clickedTimes = 0;
const incrementClick = () => {
clickedTimes++;
};
const reset = () => {
clickedTimes = 0;
};
el.addEventListener('click', e => {
incrementClick();
setTimeout(() => {
if (clickedTimes === 1) {
click(e);
} else if (clickedTimes >= 2) {
dblClick(e);
}
reset();
}, 300);
});
}
【问题讨论】:
-
您应该在点击多次后清除click-timeout。
-
你必须在空的
else{}中清除你的cdblc。
标签: javascript click ondblclick