Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setInterval每次运行都会变短_Javascript_Setinterval - Fatal编程技术网

Javascript setInterval每次运行都会变短

Javascript setInterval每次运行都会变短,javascript,setinterval,Javascript,Setinterval,因此,我制作了一个函数,可以逐字打印文本,如下所示。(我知道我的命名方案不太好,请不要开玩笑。还要记住,我对编码还是相当陌生,所以我的代码可能看起来有点奇怪/低效。) var text=document.getElementById(“游戏文本”) var dialog=“要打印的整个文本” var talk=“整个文本都添加到这里,一个字母接一个字母” var charinc=0 函数talky(){ setInterval(函数(){ 如果(字符

因此,我制作了一个函数,可以逐字打印文本,如下所示。(我知道我的命名方案不太好,请不要开玩笑。还要记住,我对编码还是相当陌生,所以我的代码可能看起来有点奇怪/低效。)

var text=document.getElementById(“游戏文本”)
var dialog=“要打印的整个文本”
var talk=“整个文本都添加到这里,一个字母接一个字母”
var charinc=0
函数talky(){
setInterval(函数(){
如果(字符

我在整个代码中多次调用这个函数,将dialog设置为我想要打印的内容,然后调用这个函数。一开始一切都很好,但每次我运行它时,字母的打印速度似乎越来越快。我真的不确定发生了什么,或者如何修复它。我在谷歌上做了一些搜索,但没有找到任何有用的东西。

第一次运行它时,每100毫秒运行一次

第二次运行时,有两次间隔,每100毫秒运行一次

等等

由于它们共享相同的变量,您只需使每个变量每100ms增加一次写入输出的速度


要么:

  • 完成后调用
    clearInterval(…)
  • 将全局变量作为参数传递给
    talky
    ,这样它们就不会在多个间隔之间共享
  • 只需更新变量,而不是再次调用
    talky

setInterval
将让它定义的函数在您的情况下每100毫秒运行一次。如果您像您所说的那样多次调用此函数,那么将有几个间隔并行运行,这可能不是您想要的

您可以使用
clearInterval
setInterval
返回的id来清除现有间隔

e、 g

var intervalId=setInterval(function(){console.log('hello,world!'))100;
clearInterval(intervalId);

当您要将
charAt
的结果分配给它时,为什么要初始化
talk
?每次调用
talky()
,您都会调用
setInterval()
并注册一个每100毫秒调用一次的函数。您从不存储
setInterval
中的句柄。。。不要在它上面使用
clearInterval()。。。因此,您最终运行了多个间隔函数,这使得间隔周期看起来缩短了。好的,我现在理解了这个问题,但我不太确定应该如何使用clearInterval。每次我想运行talky时是否应该手动调用它?我应该把它插在talky里面吗?对不起,如果我听起来像个白痴,但我对编码还是有点陌生。(似乎我很容易理解一些概念,而其他的,如间隔,则完全超出我的理解。)“当你完成时”,即作为
else
if(charinc
var text = document.getElementById("gametext")
var dialog =  "the entire text you want to print out"
var talk = "The whole text gets added here, letter by letter"
var charinc = 0

function talky() {
   setInterval(function(){
   if(charinc < dialog.length){
   talk = dialog.charAt(charinc++);
   text.innerHTML += talk;  
   }
   }, 100);
   charinc = 0
}