码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-12-04 16:06:41      阅读:65      评论:0      收藏:0      [点我收藏+]

标签:function   cti   使用数组   dispatch   lock   false   listen   lis   and   

使用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();
            }
        }
    });
}

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

标签:function   cti   使用数组   dispatch   lock   false   listen   lis   and   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!