原生js实现【longPressKey】长按键盘任意键(或组合键)3秒触发自定义事件(以Pause/Break键为例)

简介: 原生js实现【longPressKey】长按键盘任意键(或组合键)3秒触发自定义事件(以Pause/Break键为例)


<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<body>
</body>
<script>
 
let longPressKey = {
timeout: null,
trigger(
    pressedEndCallback, //长按结束触发方法
    pressedStartCallback, //按下触发方法
    pressedUpCallback, //弹起触发方法
    key = 'Pause', //长按什么键
    delaySecond = 3 //长按多少秒触发
) {
    onkeydown = (e) => {
    let k = e.keyCode || e.which || e.charCode,
        ck = e.ctrlKey || e.metaKey,
        ak = e.altKey,
        sk = e.shiftKey;
    if (e.key === key) {
        if (!this.timeout) {
        pressedStartCallback && pressedStartCallback(e);
        this.timeout = setTimeout(() => {
            this.timeout = null;
            pressedEndCallback && pressedEndCallback(e);
        }, 1000 * delaySecond);
        }
    }
    };
    onkeyup = (e) => {
    clearTimeout(this.timeout);
    this.timeout = null;
    pressedUpCallback && pressedUpCallback(e);
    };
},
};
 
//测试用例----------------------------------------
let versionTime = '2022年2月6日 17:43:12';
longPressKey.trigger(
(e) => {
    // 长按超时执行
    alert(`【更新时间】${versionTime}\n(注意校对是否已发布最新代码)`);
},
(e) => {
    // 刚刚按下键
    console.log("按键对象",e);
},
(e) => {
    // 弹起
    console.log("弹起键对象",e);
},
'Pause',
3
);
 
</script>
</html>


相关文章
|
5月前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指那些不会立即执行完毕,而是会在未来的某个时间点(比如某个操作完成后,或者某个事件触发后)才完成其执行的函数
【6月更文挑战第15天】JavaScript中的异步函数用于处理非同步任务,如网络请求或定时操作。它们使用回调、Promise或async/await。
52 7
|
2月前
|
前端开发 JavaScript
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
本文介绍了JavaScript中的循环语句,包括for循环、for-in循环、for-of循环、while循环、do-while循环以及break和continue的使用。
51 1
前端基础(八)_JavaScript循环(for循环、for-in循环、for-of循环、while、do-while 循环、break 与 continue)
|
1月前
|
JavaScript 前端开发
JavaScript 中的自定义事件
【10月更文挑战第1天】
31 1
|
22天前
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
20 0
|
2月前
|
JavaScript 前端开发
JavaScript基础知识-break和continue
这篇文章介绍了JavaScript中的break和continue关键字,并通过多个示例展示了如何使用它们来控制循环流程,包括如何使用标签来指定跳出特定的循环。
38 3
JavaScript基础知识-break和continue
|
2月前
|
JavaScript 前端开发
JS中toString和valueOf在什么时候会自动触发
本文探讨了JavaScript中`toString`和`valueOf`方法在何时会自动触发,解释了隐式类型转换时这两个方法的调用机制,并提供了多个代码示例来演示它们的自动触发情况。
31 1
|
2月前
|
移动开发 前端开发 JavaScript
原生JavaScript+canvas实现五子棋游戏_值得一看
本文介绍了如何使用原生JavaScript和HTML5的Canvas API实现五子棋游戏,包括棋盘的绘制、棋子的生成和落子、以及判断胜负的逻辑,提供了详细的代码和注释。
30 0
原生JavaScript+canvas实现五子棋游戏_值得一看
|
2月前
|
JavaScript 前端开发
JavaScript break 和 continue 语句
JavaScript break 和 continue 语句
19 3
|
3月前
|
JavaScript 前端开发
js点击抽奖符合条件触发点击次数
js点击抽奖符合条件触发点击次数
33 1
|
3月前
|
Devops 持续交付 测试技术
JSF遇上DevOps:开发流程将迎巨变?一篇文章带你领略高效协同的魅力!
【8月更文挑战第31天】本文探讨了如何在JavaServer Faces(JSF)开发中融入DevOps文化,通过持续集成与部署、自动化测试、监控与日志记录及反馈机制,提升软件交付速度与质量。文中详细介绍了使用Jenkins进行自动化部署、JUnit与Selenium进行自动化测试、ELK Stack进行日志监控的具体方法,并强调了持续改进的重要性。
38 0