php鼠标点击事件,JS鼠标点击事件的实现
发布日期:2021-06-24 13:06:01 浏览次数:2 分类:技术文章

本文共 3205 字,大约阅读时间需要 10 分钟。

这篇文章主要介绍了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次的效果,具体实现如下源码:

鼠标3击

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版的代码

Document

234234234234234

(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")

}

})

})();

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

转载地址:https://blog.csdn.net/weixin_32946543/article/details/115543334 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:php ice 性能,ZeroICE+PHP整合
下一篇:java注解与java配置类,使用@ConfigurationProperties注解实现springboot里配置映射到Java类上...

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月17日 12时44分03秒