Javascript 事件函数在不触发任何事件的情况下自动发生

Javascript 事件函数在不触发任何事件的情况下自动发生,javascript,events,addeventlistener,event-listener,keyboard-events,Javascript,Events,Addeventlistener,Event Listener,Keyboard Events,使用非常初级的方法创建JavaScript蛇游戏。我正在使用KeyboardEvent.key属性 当我触发一个事件时(比如按箭头向上键)。我的蛇朝这个方向移动,但一旦我每隔一段时间按另一个键(比如按箭头向下键)(我使用setTimeout()作为游戏计数器),蛇就会上下移动。i、 e箭头向上键按下事件尚未删除 //游戏板 var nodeList=document.getElementById('game-board') 让children=nodeList.childNodes; var

使用非常初级的方法创建JavaScript蛇游戏。我正在使用
KeyboardEvent.key
属性
当我触发一个事件时(比如按箭头向上键)。我的蛇朝这个方向移动,但一旦我每隔一段时间按另一个键(比如按箭头向下键)(我使用
setTimeout()
作为游戏计数器),蛇就会上下移动。i、 e箭头向上键按下事件尚未删除

//游戏板
var nodeList=document.getElementById('game-board')
让children=nodeList.childNodes;
var hi=节点列表。子节点
var i;
对于(i=0;i对于(i=0;i),您可能需要考虑设置一些变量,即“代码> var s1;var s2;< /c> >顶部,不要将它们设置为任何东西,然后在您的Snake移动函数中,将特定的SET间隔设置为变量,然后清除所有其他设置的间隔,除非您想运行的一个间隔。
我不擅长解释这一点,但你可以看到下面的演示。基本上,它会停止设置间隔,阻止你的蛇朝那个方向移动,并允许它朝另一个方向移动

var-s1;
var x=0;
s1=setInterval(function(){//将setInterval设置为变量时,可以使用clearInterval([变量名称])停止它;
x++;
document.getElementById('text').innerHTML=x;
}, 1000);
函数停止(){
间隙(s1);
}
函数continue1(){
s1=设置间隔(函数(){
x++;
document.getElementById('text').innerHTML=x;
}, 1000);
}

0

停止
继续
快速修复方法是使用
clearInterval
取消现有的间隔。正确的解决方案是使用单个间隔并处理其中的所有移动。其思想是,单个按键只会更改蛇的当前方向,而间隔功能独立处理其移动。这也将删除大量重复的代码。你这样做真的很不稳定,你让自己很难受。你应该有一个移动蛇的中间间隔,同时你要单独跟踪按下的键。这是我的看法:@AntonCurmanschii这不是我说的,只是用不同的词吗?哈哈,我忘了加一个“1”到我的按钮函数。谢谢你,我来检查一下。@jsman225只要记住,如果你使用这个方法,记得把你的变量设置为全局变量。我无法描述我花了多少时间想知道为什么我的程序不能工作,这通常就是问题所在。:)