javascript - 按下键时如何触发事件
问题描述
我之前尝试过代码,但是当我按住 W 时它会重复代码,但我想这样做,如果我按住它,它只会执行代码之一。
window.addEventListener("keydown", checkKeyPressW, false);
var player = document.getElementById("player");
var leftMarginCounter = 0;
var bottomMarginCounter = 0;
var leftMarginCounterToString = "";
function checkKeyPressA_D(keyPressed) {
if(keyPressed.keyCode == "97") {
if(player.style.marginLeft != "0px") {
leftMarginCounter = leftMarginCounter - 1;
leftMarginCounterToString = leftMarginCounter.toString();
leftMarginCounterToString = leftMarginCounterToString + "px";
player.style.marginLeft = leftMarginCounterToString;
}
}
else if(keyPressed.keyCode == "100") {
if(player.style.marginLeft != "1316px") {
leftMarginCounter = leftMarginCounter + 1;
leftMarginCounterToString = leftMarginCounter.toString();
leftMarginCounterToString = leftMarginCounterToString + "px";
player.style.marginLeft = leftMarginCounterToString;
}
}
};
function checkKeyPressW(keyPressedW) {
if(keyPressedW.keyCode == "87") {
console.log("Pressed w");
}
}
解决方案
JS 演示:https ://jsfiddle.net/utnqeLmf/1/
代码:
window.addEventListener("keydown", checkKeyPressW, {
once : true
});
once 一个布尔值,表示添加后最多应调用一次侦听器。如果为 true,则侦听器将在调用时自动删除。
编辑
如果您想在按下按键时避免连续按键安慰,请将事件更改为 keyup
window.addEventListener("keyup", checkKeyPressW);
推荐阅读
- c++ - 如何将 SSAO 应用于天空盒?
- javascript - 如何在 Angular Firebase 中修复浏览器刷新时的“TypeError:无法读取属性 'getIdToken' of null”?
- sql - 稍微修改SQL给我带来:ORA-01427:单行子查询返回多于一行
- python - concurrent.futures ThreadPoolExecutor - 线程数不匹配
- selenium - Selenium IDE 3.x - 验证变量的内容
- javascript - HTML5 音频播放器未在 ios Safari 中自动播放
- go - 如何区分哪些依赖项是可下载的?
- assembly - 我的汇编代码为字符串长度计算了一个额外的字节
- facebook - 使用 Facebook API 获取全球观看次数最多的视频
- python - 在python中实现特定的分布