我在键盘上按键盘上的1(即keyCode中的49)时,会在第一个功能内分配一个事件侦听器,它将触发第一个功能,该功能将在您尝试按A和S时对其进行控制。然后,如果我按下键盘上的2(即keyCode中的50),它将触发第二个功能,该功能将在您每次按下D和F时进行操作。我的问题是在调用第一个函数然后调用第二个函数之后,如何禁用第一个函数以防止按下A和S?简而言之,如何在每次调用新函数时禁用我调用的函数的事件侦听器?
<body>
</body>
<script>
document.body.addEventListener('keydown',function(e){
if(e.keyCode == 49){
document.body.addEventListener('keydown',function(e){
switch(e.keyCode){
case 65:
console.log('you pressed A')
break;
case 83:
console.log('you pressed s')
break
}
})
}else if(e.keyCode == 50){
document.body.addEventListener('keydown',function(e){
switch(e.keyCode){
case 68:
console.log('you pressed d')
break;
case 70:
console.log('you pressed f')
break
}
})
}
});
</script>
要删除事件侦听器,该函数必须具有要引用的名称,以便您可以引用要删除的事件侦听器。例如:
function myFunction() {
// code here
}
document.body.addEventListener("keydown", myFunction);
并删除它:
document.body.removeEventListener("keydown", myFunction);
没有为名称分配功能,JavaScript不知道要删除哪个事件侦听器,因为您可以将多个功能绑定到一个元素。
所以要更改您的代码,应该是:
document.body.addEventListener("keydown",function(e) {
if (e.keyCode == 49) {
document.body.addEventListener("keydown", verticalMoves);
} else if (e.keyCode == 50) {
document.body.addEventListener("keydown", horizontalMoves);
}
}
function verticalMoves(e) {
switch(e.keyCode) {
case 65: console.log("you pressed A"); break;
case 83: console.log("you pressed S"); break;
}
document.body.removeEventListener("keydown", verticalMoves);
}
function horizontalMoves(e) {
switch(e.keyCode) {
case 68: console.log("you pressed D"); break;
case 70: console.log("you pressed F"); break;
}
document.body.removeEventListener("keydown", horizontalMoves);
}