当前位置:Gxlcms > JavaScript > JS鼠标3次点击事件实现代码及扩展思路

JS鼠标3次点击事件实现代码及扩展思路

时间:2021-07-01 10:21:17 帮助过:41人阅读

这几天看了一下JavaScript高级程序设计中的Dom事件相关内容,同时看到网上有关鼠标多次点击事件,鼠标事件是简单、常用的事件之一,于是便针对点击事件进行一些小的扩展和实现,增强对Dom事件的进一步理解。其中的实现和思路是自己总结的,有什么不对的地方还请大神们交流指正。

1、制作一个通用的事件处理模块(原生实现)

以下实现基于AMD定义模块方式:

  1. /**
  2. * 浏览器兼容事件处理组件
  3. */
  4. define(function () {
  5. var EventUtil = {
  6. // 添加事件监听
  7. addHandler: function (element, type, handler) {
  8. if (element.addEventListener) {
  9. element.addEventListener(type, handler, false);// DOM2级事件
  10. } else if (element.attachEvent) {
  11. element.attachEvent('on' + type, handler);// DOM2级IE事件
  12. } else {
  13. element['on' + type] = handler;// DOM0级事件
  14. }
  15. },
  16. // 移除事件监听
  17. removeHandler: function (element, type, handler) {
  18. if (element.removeEventListener) {
  19. element.removeEventListener(type, handler, false);
  20. } else if (element.detachEvent) {
  21. element.detachEvent('on' + type, handler);
  22. } else {
  23. element['on' + type] = null;
  24. }
  25. },
  26. // 获取事件对象
  27. getEvent: function (event) {
  28. return event ? event : window.event;
  29. },
  30. // 获取事件的目标元素
  31. getTarget: function (event) {
  32. return event.target || event.srcElement;
  33. },
  34. // 禁止事件默认行为
  35. preventDefault: function (event) {
  36. if (event.preventDefault) {
  37. event.preventDefault();
  38. } else {
  39. event.returnValue = false;
  40. }
  41. },
  42. // 禁止事件冒泡
  43. stopPropagation: function (event) {
  44. if (event.stopPropagation) {
  45. event.stopPropagation();
  46. } else {
  47. event.cancelBubble = true;
  48. }
  49. }
  50. };
  51. return EventUtil;
  52. });

2、鼠标3击事件实现

鼠标点击事件涉及的事件及执行触发顺序:

mousedown:鼠标任意键按下时触发

mouseup:释放鼠标按钮时触发

click:单击

mousedown

mouseup

dblclick:双击

显然,click是依赖dblclick的,可以考虑根据这两个事件实现鼠标3次连续点击触发执行,设计触发dblclick后监听click事件,如果在短时间内触发了click事件,则构成鼠标连续点击3次的效果,具体实现如下源码: 

  1. <div>
  2. <button id="button">鼠标3击</button>
  3. </div>

js 代码

  1. require(['eventUtil'], function (EventUtil) {
  2. var button = document.getElementById('button');
  3. click3Event(button, function (event) {
  4. console.log('3 click');
  5. });
  6. // 鼠标3击事件
  7. function click3Event(dom, fn) {
  8. var handler = function (event) {
  9. var event = EventUtil.getEvent(event),
  10. target = EventUtil.getTarget(event);
  11. var handler = function (event) {
  12. var event = EventUtil.getEvent(event),
  13. target = EventUtil.getTarget(event);
  14. EventUtil.removeHandler(target, 'click', handler);
  15. // 执行内容
  16. fn();
  17. };
  18. EventUtil.addHandler(target, 'click', handler);
  19. // 为防止双击后较长时间再次单击执行事件
  20. setTimeout(function () {
  21. EventUtil.removeHandler(target, 'click', handler);
  22. }, 300);
  23. };
  24. EventUtil.addHandler(dom, 'dblclick', handler);
  25. }

3、鼠标n击事件实现

由鼠标3击事件联想到,如果实现n次鼠标连击事件触发如何实现。想到的思路是:禁用目标对象的dblclick事件,只用click事件进行连续点击的逻辑判断和操作,在连续的短时间内满足点击n次即可触发执行,否则重新计算累加次数。具体的实现代码如下:

  1. require(['eventUtil'], function (EventUtil) {
  2. var button = document.getElementById('button');
  3. nclickEvent(4, button, function (event, n) {
  4. console.log(n + ' click');
  5. });
  6. function nclickEvent (n, dom, fn) {
  7. // 禁止双击事件
  8. EventUtil.removeHandler(dom, 'dblclick', null);
  9. var n = parseInt(n) < 1 ? 1 : parseInt(n),
  10. count = 0,
  11. lastTime = 0;
  12. var handler = function (event) {
  13. var currentTime = new Date().getTime();
  14. count = (currentTime - lastTime < 300) ? count + 1 : 0;
  15. lastTime = new Date().getTime();
  16. if (count >= n - 1) {
  17. fn(event, n);
  18. count = 0;
  19. }
  20. };
  21. EventUtil.addHandler(dom, 'click', handler);
  22. }
  23. });

最后给大家分享一个jquery版的代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. <div id="box">234234234234234</div>
  9. <script src="js/jquery.min.js"></script>
  10. <script>
  11. (function(){
  12. var num=0,d=null;
  13. $('#box').click(function(){
  14. if(d){clearTimeout(d)}
  15. d=setTimeout(function(){
  16. num=0
  17. },200);
  18. num++;
  19. if(num>=3){
  20. alert(num+"\n ok")
  21. }
  22. })
  23. })();
  24. </script>
  25. </body>
  26. </html>

 到此文章就结束了,大家可以根据需要选择自己想用的代码。

人气教程排行