You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测鼠标按下时长并在松开时以秒为单位显示该时长?

监测鼠标按下时长并显示(秒为单位)

嘿,这个需求其实挺容易实现的,用原生JavaScript就能搞定!我给你准备了一个完整的可运行示例,直接复制到HTML文件里就能测试:

<!DOCTYPE html>
<html>
<head>
    <title>Mouse Press Duration</title>
    <style>
        .click-area {
            padding: 2rem;
            background: #eee;
            cursor: pointer;
            margin: 1rem 0;
            border-radius: 8px;
        }
    </style>
</head>
<body>
    <div class="click-area">按住我,松开后显示按下时长</div>
    <p>按下时长:<span id="duration-display">0</span> 秒</p>

    <script>
        // 获取页面元素
        const clickArea = document.querySelector('.click-area');
        const durationDisplay = document.getElementById('duration-display');
        let startTime;

        // 鼠标按下时记录起始时间戳
        clickArea.addEventListener('mousedown', () => {
            startTime = Date.now();
        });

        // 计算时长并更新显示的通用逻辑
        function showDuration() {
            if (startTime) {
                const endTime = Date.now();
                // 把毫秒差转换成秒,保留两位小数更友好
                const duration = (endTime - startTime) / 1000;
                durationDisplay.textContent = duration.toFixed(2);
                startTime = null; // 重置起始时间,避免重复计算
            }
        }

        // 鼠标松开时触发计算
        clickArea.addEventListener('mouseup', showDuration);

        // 额外处理鼠标移出区域的情况(防止按住鼠标离开后不触发mouseup)
        clickArea.addEventListener('mouseleave', showDuration);
    </script>
</body>
</html>

核心逻辑拆解:

  • Date.now():用来获取当前时间的毫秒级时间戳,按下鼠标时记录起始时间,松开时记录结束时间,两者的差值就是按下的总毫秒数。
  • 秒数转换:把毫秒差值除以1000就得到了秒数,用toFixed(2)保留两位小数,让显示结果更直观。
  • mouseleave事件监听:加这个是为了避免用户按住鼠标后移出点击区域,导致mouseup事件不触发的情况,让整个逻辑更健壮。

你可以根据自己的需求修改点击区域的样式,或者把显示逻辑改成弹窗、控制台输出等形式~

内容的提问来源于stack exchange,提问作者Simone Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:43:38