如何每5秒检测右箭头键是否按下?现有代码仅生效一次求排查
问题分析与解决方案
嘿,我来帮你看看问题出在哪~
你的代码之所以只能触发一次提醒,核心有两个问题:
1. 定时器调用函数时缺少事件参数
你用setInterval(KeyPressed, 5000)每隔5秒调用一次KeyPressed,但这个时候并没有传递键盘事件对象k。当定时器执行函数时,k是undefined,访问k.keyCode会直接抛出错误,导致定时器的后续执行被中断,所以只有你手动按下右箭头时(此时onkeydown会传递事件对象),函数才会正常执行弹出提醒。
2. 逻辑误解了“检测按键是否按下”的方式
你的需求是每5秒检测右箭头是否处于被按下的状态,但onkeydown只是在按键按下的瞬间触发一次,无法持续跟踪按键状态。要实现定时检测,我们需要先记录按键的按下/释放状态,再定时检查这个状态。
修正后的代码
这里给你调整后的实现,同时推荐使用更现代的e.key替代已弃用的keyCode:
// 记录右箭头的按下状态 let isRightArrowPressed = false; // 监听按键按下事件,更新状态 window.addEventListener('keydown', (e) => { if (e.key === 'ArrowRight') { isRightArrowPressed = true; } }); // 监听按键释放事件,更新状态 window.addEventListener('keyup', (e) => { if (e.key === 'ArrowRight') { isRightArrowPressed = false; } }); // 每5秒检测一次状态 setInterval(() => { if (isRightArrowPressed) { alert("Right Arrow is being pressed!"); } }, 5000);
这样修改后,只要右箭头处于按下状态,每隔5秒就会弹出提醒;松开按键后,提醒就会停止啦。
内容的提问来源于stack exchange,提问作者Clint Anumudu
相关产品推荐
相关产品推荐

