js单击/双击/三击,长按/单击

本文讲述了在Web开发中如何使用JavaScript为页面元素实现单击、长按和多击事件的区分,通过定时器和点击计数器来检测用户的交互行为,提升用户体验。
摘要由CSDN通过智能技术生成

之前写项目的时候遇到了一个这样的需求,对于页面上的一个元素做单击/长按,触发不同事件,后面考虑到鲁棒性还是换成单击/双击/三击的形式了,不过这些事件之间的区分给人的印象还是深刻的(其实就是卡在这里太久了,乐),写篇文章记录一下。

单击/长按触发不同事件

<!DOCTYPE html>
<html>
<head>
    <title>长按/单击</title>
</head>
<body>
    <div id="clickableDiv" style="width: 200px; height: 100px; background-color: #90EE90;"></div>

    <script>
        var button = document.getElementById('clickableDiv');
        var timer = null; // 用于长按检测的计时器
        var delay = 500; // 长按的阈值(毫秒)

        button.addEventListener('mousedown', function() {
            // 当用户按下按钮时,开始计时
            timer = setTimeout(function() {
                console.log('长按');
                timer = null; // 长按事件发生后清除计时器
            }, delay);
        });

        button.addEventListener('mouseup', function() {
            // 当用户释放按钮时,检查计时器是否仍然存在
            if (timer) {
                clearTimeout(timer); // 如果计时器存在,清除它
                console.log('单击'); // 并且认为这是一次单击事件
            }
        });

        button.addEventListener('mouseleave', function() {
            // 如果在长按过程中鼠标离开了元素,也应该取消长按操作
            if (timer) {
                clearTimeout(timer);
                timer = null;
            }
        });
    </script>
</body>
</html>

单击/双击/三击触发不同事件

<!DOCTYPE html>
<html>
<head>
    <title>单击/双击/三击</title>
</head>
<body>
    <div id="clickableDiv" style="width: 200px; height: 100px; background-color: #90EE90;"></div>

    <script>
        var clickCount = 0; // 点击计数
        var clickTimer = null; // 计时器

        document.getElementById('clickableDiv').addEventListener('click', function() {
            clickCount++; // 增加点击计数
            if (clickTimer === null) {
                // 如果计时器为空,则设置一个计时器
                clickTimer = setTimeout(function() {
                    // 根据点击次数执行操作
                    if (clickCount === 1) {
                        console.log('单击');
                    } else if (clickCount === 2) {
                        console.log('双击');
                    } else if (clickCount >= 3) {
                        console.log('三击');
                    }
                    // 重置计数和计时器
                    clickCount = 0;
                    clearTimeout(clickTimer);
                    clickTimer = null;
                }, 400); // 设定时间间隔为400毫秒,你可以根据需要调整这个值
            }
        });
    </script>
</body>
</html>
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值