[前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件

使用setTimeout实现双击事件

例如,这样:
let div = document.getElementById("div");
doubleClick(div, function (event) {
    console.log(‘双击‘)
})

function doubleClick(ele, fn) { // 省略参数合法性的判断
    let event = new Event("doubleClick"); // 自定义双击事件(可以使用CustomEvent携带数据)
    // 双击事件监听
    ele.addEventListener("doubleClick", function (event) {
        fn(event);
    });
    // 双击事件触发
    let timeout;
    let clicked = false; // 是否已经点击过一次
    ele.addEventListener("click", function () {
        if (clicked) {
            clicked = false;
            if (timeout) {
                clearTimeout(timeout);
            }
            ele.dispatchEvent(event); // 事件分发
        } else {
            clicked = true;

            timeout = setTimeout(function () {
                clicked = false;
            }, 400);
        }
    });
}

使用数组实现双击事件或n击事件

灵感来自于Android系统多击触发彩蛋的源码

用前端的方式实现长这样:
let div = document.getElementById("div");
multiClick(div, function (event) {
    console.log(‘双击‘)
}, 2)

function multiClick(ele, fn, clickNum) { // 省略参数合法性的判断
    let event = new Event("multiClick"); // 创建n击事件(可以使用CustomEvent携带数据)
    let hits = [];
    // n击事件监听
    ele.addEventListener("multiClick", function (event) {
        fn(event);
    });
    // n击事件触发
    ele.addEventListener("click", function () {
        let now = new Date().getTime();

        hits.push(now);

        if (hits.length > 1) {
            if (hits[0] + 500 > now) {
                if (hits.length === clickNum) {
                    hits = [];
                    ele.dispatchEvent(event); // 事件分发
                }
            } else {
                hits.shift();
            }
        }
    });
}

原文地址:https://www.cnblogs.com/homehtml/p/11983411.html

时间: 2025-01-05 07:23:12

[前端][自定义DOM事件]不使用setTimeout实现双击事件或n击事件的相关文章

ListView使用自定义适配器的情况下实现适配器的控件点击事件执行Activity界面中的方法

如果ListView使用的是自定义的适配器,比如MyArrayAdapter extends ArrayAdapter<String> 那么,如何实现适配器中的点击事件执行activity界面中的方法呢? 实现思路:在自定义适配器MyArrayAdapter 类型中自定义接口和接口方法,然后在activity界面中MyArrayAdapter实例实现这个接口. 较为完整的代码见上文. 1.MyArrayAdapter 关键代码 自定义接口和方法的代码如下: //列表项的单击事件监听接口 pub

EditText 双击才能获取点击事件

在获取EditText点击事件的过程中,发现EditText setOnClickListener事件响应中,只有获取焦点的时候才会响应, 如当焦点在别的控件上时,只能先点击获取焦点,第二次点击才会响应,解决办法改用setOnTouchListener监听, android.view.View下的OnTouchListener接口是只要触摸(touch)状态改变,就会触发该事件. 代码如下: woman_SDloadText.setOnTouchListener(new View.OnTouch

click事件的累加绑定,绑定一次点击事件,执行多次

最近做项目为一个添加按钮绑定点击事件,很简单的一个事情,于是我按照通常做法找到元素,使用jquery的on()方法为元素绑定了点击事件,点击同时发送请求.完成后看效果,第一次点击没有问题.再一次点击后发现发送了两次请求,后面再点击发现请求的数量越来越多.这时我初步判断可能是元素有多个或是多次调用了方法,但找了一遍,发现只为一个元素绑定了事件,且只调用了一次.后来通过查资料才知道是点击事件被累加绑定了!那到底什么是累加绑定呢?什么时候会发生累加绑定?累加绑定后该如何解决呢?下面我就通过这三个问题来

前端技术——DOM艺术

先知BOM,再知DOM BOM <a href="#">BOM</a> DOM* javaScript中的DOM操作  jQuery中的DOM操作 基于JavaScript的DOM操作 DOM:文档对象模型,文档可以是.xml .html,那么 xmlDOM 和 htmlDOM是否有关系? XMLDOM(其实就是一组可以操作xml文档的api说明)定义了访问和处理 XML 文档的标准方法 HTMLDOM文档格式 符合XML语法标准,所以可以使用XML DOM A

Android 自定义View——自定义点击事件

每个人手机上都有通讯录,这是毫无疑问的,我们通讯录上有一个控件,在通讯录的最左边有一列从"#"到"Z"的字母,我们通过滑动或点击指定的字母来确定联系人的位置,进而找到联系人.我们这一节就通过开发这个控件,来学如何自定义控件的点击事件. 通讯录列表查找控件界面绘制 首先我们需要先将控件的基本布局绘制出来,这里我们不在做详细的解释,在<Android 自定义View--自定义View控件 >博客中,我们已经详细讲解了如何绘制自定义控件的布局.通讯录列表查找控

关于百度地图InfoWindow响应自定义布局点击事件

大概讲解: 在百度地图上显示一个marker,当marker被点击后,显示自定义的View.当自定义的View被点击后,响应不同Button的点击事件.被百度这个infowindo里面的view坑惨了,一直以为不能点击呢??原来里面的view可以点击也可以被响应!! 先看效果图: 备注:点击详情(进入此任务详情.点击导航进入百度导航) 代码如下:  baiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() { @

自定义的cell中如果存在着UIButton,那如何将点击事件传递出去呢?

自定义cell后,将indexPath参数传递到自定义的cell中(NSIndexPath为cell的一个retain的属性),自定义的cell申明一个协议,里面提供了一个方法 - (void)touchEventAtIndexPath:(NSIndexPath *)indexPath; ...... @property (nonatomic, assign) id<AppTableViewCellDelegate>delegate; // 将事件传递出去 ...... - (void)but

移动端点击事件全攻略,有你知道与不知道的各种坑

看标题的时候你可能会想,点击事件有什么好说的,还写一篇攻略?哈哈,如果你这么想,只能说明你too young to simple. 接触过移动端开发的同学可能都会面临点击事件的第一个问题:click事件的300ms延迟响应.不能立即响应给体验造成了很大的困扰,因此解决这个问题就成为了必然. 这个问题的解决方案就是: zepto.js的tap事件.tap事件可以理解为在移动端的click事件,而zepto.js因为几乎完全复制jQuery的api,因此常常被用在h5的开发上用来取代jquery.

Android中点击事件的实现方式

在之前博文中多次使用了点击事件的处理实现,有朋友就问了,发现了很多按钮的点击实现,但有很多博文中使用的实现方式有都不一样,到底是怎么回事.今天我们就汇总一下点击事件的实现方式. 点击事件的实现大致分为以下三种: (1)Activity 实现接口方式实现点击事件(经常使用) (2)自定义方法,使用配置文件android:onclick (3)使用内部类方式实现 (4)使用匿名内部类实现介绍下几种点击事件的实现方式: 下面我们通过代码来简单演示下几种点击事件的实现方式: (1)Activity 实现