JS鼠标3次点击事件实现代码及扩展思路
作者:xiazhiqiang01 时间:2024-03-22 01:55:24
这几天看了一下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>
到此文章就结束了,大家可以根据需要选择自己想用的代码。
来源:http://blog.csdn.net/xiazhiqiang01/article/details/52527478
标签:JS,鼠标,3次点击
0
投稿
猜你喜欢
vscode中使用Autoprefixer3.0无效的解决方法
2023-10-05 11:03:46
oracle中添加删除主键的方法
2023-06-30 00:28:52
chatgpt国内镜像 pycharm idea插件使用详解
2022-03-29 10:08:41
setTimeout()与setInterval()方法区别介绍
2024-04-22 13:24:09
vue-cli3项目配置eslint代码规范的完整步骤
2024-05-29 22:23:12
MySQL数据库查询性能优化策略
2024-01-14 17:53:41
python3.6中anaconda安装sklearn踩坑实录
2023-03-16 19:17:15
javascript使用call调用微信API
2023-07-02 05:19:48
淘宝搜索框研究报告
2010-07-27 12:49:00
一行两列背景自适应的简单写法 DIV+CSS
2008-07-15 12:51:00
python利用递归方法实现求集合的幂集
2023-06-10 09:38:12
python django 原生sql 获取数据的例子
2023-02-16 18:35:02
golang 实用库gotable的具体使用
2024-04-27 15:31:48
Python实现简单猜数字游戏
2021-03-22 14:31:50
Pycharm最全报错的原因与解决方法总结(推荐!)
2023-10-26 04:20:03
python标准库学习之sys模块详解
2021-08-02 02:25:19
python3爬取淘宝信息代码分析
2021-05-03 04:59:11
Vue 实现拨打电话操作
2024-05-09 15:09:53
一篇文章带你了解python标准库--sys模块
2022-04-25 10:21:37
如何基于python操作json文件获取内容
2023-03-30 15:48:04