我在做一个图片预览功能,想实现单击选中、双击放大。但加了 dblclick 之后,每次双击都会先触发一次 click,导致逻辑混乱。
试过用 setTimeout 延迟 click 判断,但感觉很卡,而且有时候还是会误触发。有没有更靠谱的处理方式?
element.addEventListener('click', () => {
console.log('单击');
});
element.addEventListener('dblclick', () => {
console.log('双击');
});
具体来说,双击事件触发时,浏览器会先发一次 click 再发一次 dblclick,所以不能靠事件顺序判断,得靠延迟处理 + 取消机制。
看个可用的写法:
注意这里用
isDblClick是为了防止某些极端情况(比如快速点三下),但核心是dblclick里一定要clearTimeout掉之前的 click 延迟回调。另外建议把延迟时间设成和系统双击间隔一致,比如 Windows 默认是 500ms,但前端一般用 300ms 就够了,体验更顺滑。