当两个事件绑定在同一个 dom 上时,只会触发单击事件

使用延迟来解决,代码如下:

  1. // html
  2. <div id="a">单击 or 双击</div>
  3. // js
  4. const dom = document.getElementById('a');
  5. // 单击事件
  6. dom.onclick = function () {
  7. if (window.timer) {
  8. clearTimeout(window.timer);
  9. window.timer = null;
  10. }
  11. window.timer = setTimeout(function () {
  12. // TODO: 业务代码
  13. alert('单击');
  14. }, 200);
  15. };
  16. // 双击事件
  17. dom.ondblclick = function () {
  18. if (window.timer) {
  19. clearTimeout(window.timer);
  20. window.timer = null;
  21. }
  22. // TODO: 业务代码
  23. alert('双击');
  24. }

使用计数+延迟解决,代码如下:

不使用 dblclick 事件,只使用 click。在单位时间延迟内点击 2次 则为双击,否则为单击

  1. // html
  2. <div id="b">单击 or 双击</div>
  3. // js
  4. const dom2 = document.getElementById('b');
  5. let count = 0;
  6. dom2.onclick = function () {
  7. count ++;
  8. window.timer2 = setTimeout(function () {
  9. if (count === 1) {
  10. // TODO: 业务代码
  11. alert('单击');
  12. count = 0;
  13. return;
  14. }
  15. // TODO: 双击业务代码
  16. alert('双击');
  17. count = 0;
  18. clearTimeout(window.timer2);
  19. window.timer2 = null;
  20. }, 200);
  21. }