全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

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

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

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

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

/**
 * 浏览器兼容事件处理组件
 */
define(function () {
  var EventUtil = {
    // 添加事件监听
    addHandler: function (element, type, handler) {
      if (element.addEventListener) {
        element.addEventListener(type, handler, false);// DOM2级事件
      } else if (element.attachEvent) {
        element.attachEvent('on' + type, handler);// DOM2级IE事件
      } else {
        element['on' + type] = handler;// DOM0级事件
      }
    },
    // 移除事件监听
    removeHandler: function (element, type, handler) {
      if (element.removeEventListener) {
        element.removeEventListener(type, handler, false);
      } else if (element.detachEvent) {
        element.detachEvent('on' + type, handler);
      } else {
        element['on' + type] = null;
      }
    },
    // 获取事件对象
    getEvent: function (event) {
      return event ? event : window.event;
    },
    // 获取事件的目标元素
    getTarget: function (event) {
      return event.target || event.srcElement;
    },
    // 禁止事件默认行为
    preventDefault: function (event) {
      if (event.preventDefault) {
        event.preventDefault();
      } else {
        event.returnValue = false;
      }
    },
    // 禁止事件冒泡
    stopPropagation: function (event) {
      if (event.stopPropagation) {
        event.stopPropagation();
      } else {
        event.cancelBubble = true;
      }
    }
  };

  return EventUtil;
});

2、鼠标3击事件实现

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

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

mouseup:释放鼠标按钮时触发

click:单击

mousedown

mouseup

dblclick:双击

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

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

js 代码

require(['eventUtil'], function (EventUtil) {
  var button = document.getElementById('button');

  click3Event(button, function (event) {
    console.log('3 click');
  });

  // 鼠标3击事件
  function click3Event(dom, fn) {
    var handler = function (event) {
      var event = EventUtil.getEvent(event),
        target = EventUtil.getTarget(event);

      var handler = function (event) {
        var event = EventUtil.getEvent(event),
          target = EventUtil.getTarget(event);

        EventUtil.removeHandler(target, 'click', handler);

        // 执行内容
        fn();
      };

      EventUtil.addHandler(target, 'click', handler);

      // 为防止双击后较长时间再次单击执行事件
      setTimeout(function () {
        EventUtil.removeHandler(target, 'click', handler);
      }, 300);
    };

    EventUtil.addHandler(dom, 'dblclick', handler);
  }

3、鼠标n击事件实现

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

require(['eventUtil'], function (EventUtil) {
  var button = document.getElementById('button');

  nclickEvent(4, button, function (event, n) {
    console.log(n + ' click');
  });


  function nclickEvent (n, dom, fn) {
    // 禁止双击事件
    EventUtil.removeHandler(dom, 'dblclick', null);

    var n = parseInt(n) < 1 ? 1 : parseInt(n),
      count = 0,
      lastTime = 0;

    var handler = function (event) {
      var currentTime = new Date().getTime();

      count = (currentTime - lastTime < 300) ? count + 1 : 0;

      lastTime = new Date().getTime();

      if (count >= n - 1) {
        fn(event, n);
        count = 0;
      }
    };

    EventUtil.addHandler(dom, 'click', handler);
  }
});

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

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<body>
<div id="box">234234234234234</div>
	<script src="js/jquery.min.js"></script>
	<script>
	(function(){
		var num=0,d=null;
		$('#box').click(function(){
			if(d){clearTimeout(d)}
			d=setTimeout(function(){
				num=0
			},200);
			num++;
			if(num>=3){
				alert(num+"\n ok")
			}
		})
	})();
	</script>
</body>
</html>

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


# JS鼠标3次点击  # javascript触发模拟鼠标点击事件  # 利用chrome浏览器进行js调试并找出元素绑定的点击事件详解  # 解决Js先触发失去焦点事件再执行点击事件的问题  # JavaScript实现父子dom同时绑定两个点击事件  # 一个用捕获  # 一个用冒泡时执行顺序的方法  # vuejs响应用户事件(如点击事件)  # JavaScript给每一个li节点绑定点击事件的实现方法  # js中class的点击事件没有效果的解决方法  # JS通用方法触发点击事件代码实例  # 鼠标  # 双击  # 时间内  # 单击  # 有什么  # 看了  # 相关内容  # 这两个  # 大神  # 给大家  # 这几天  # 按下  # 可以根据  # 到此  # 想用  # 较长  # 还请  # 程序设计  # 移除  # 如何实现 


相关文章: 已有域名和空间如何快速搭建网站?  电商网站制作价格怎么算,网上拍卖流程以及规则?  济南专业网站制作公司,济南信息工程学校怎么样?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  网站制作话术技巧,网站推广做的好怎么话术?  javascript中的try catch异常捕获机制用法分析  如何在香港服务器上快速搭建免备案网站?  魔方云NAT建站如何实现端口转发?  建站之星好吗?新手能否轻松上手建站?  太平洋网站制作公司,网络用语太平洋是什么意思?  如何在阿里云完成域名注册与建站?  电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?  如何选择高性价比服务器搭建个人网站?  深圳网站制作案例,网页的相关名词有哪些?  如何做网站制作流程,*游戏网站怎么搭建?  建站org新手必看:2024最新搭建流程与模板选择技巧  如何在Golang中引入测试模块_Golang测试包导入与使用实践  高防服务器租用指南:配置选择与快速部署攻略  已有域名建站全流程解析:网站搭建步骤与建站工具选择  个人网站制作流程图片大全,个人网站如何注销?  建站之星后台管理如何实现高效配置?  湖北网站制作公司有哪些,湖北清能集团官网?  大连 网站制作,大连天途有线官网?  如何快速搭建高效简练网站?  广州建站公司哪家好?十大优质服务商推荐  如何确认建站备案号应放置的具体位置?  山东网站制作公司有哪些,山东大源集团官网?  如何在Windows环境下新建FTP站点并设置权限?  常州企业网站制作公司,全国继续教育网怎么登录?  音乐网站服务器如何优化API响应速度?  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  完全自定义免费建站平台:主题模板在线生成一站式服务  活动邀请函制作网站有哪些,活动邀请函文案?  济南企业网站制作公司,济南社保单位网上缴费步骤?  Android使用GridView实现日历的简单功能  建站之星如何保障用户数据免受黑客入侵?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  高端网站建设与定制开发一站式解决方案 中企动力  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  如何通过网站建站时间优化SEO与用户体验?  广德云建站网站建设方案与建站流程优化指南  简历在线制作网站免费版,如何创建个人简历?  临沂网站制作公司有哪些,临沂第四中学官网?  如何访问已购建站主机并解决登录问题?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。