2016-05-08 1 views
3

私は以下のように文字で文字をプリントアウトする関数を作っています(私の命名体系はあまり面白くないのが分かります。私はJavascript setIntervalが実行されるたびに短くなっています

)。まだ
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 
} 

ので、私のコードは、非効率的な/少し奇妙に思えるかもしれないコーディングにかなり新しいだと私は私が印刷したいされているものにダイアログを設定し、私のコード全体に数回この関数を呼び出すと、その関数を呼び出します。そして、最初はうまくいきますが、それを実行するたびに、手紙が素早く素早く印刷されるようです。私は実際に何が起こっているのか、それをどう修正するのかは分かりません。私はGoogleでいくつかの検索を行ってきましたが、有用なものはありませんでした。

+0

あなただけのつもり 'charAt'から、それまでの結果を代入しているのに、なぜあなたは' talk'を初期化していますか? –

+1

'talky()'を呼び出すたびに、 'setInterval()'を呼び出し、100ミリ秒ごとに呼び出される関数を登録します。 'setInterval'からハンドルを保存することは決してありません。決して' clearInterval() 'を使用しないでください。そうすれば、減少したインターバル期間の_appearance_を与える複数のインターバル関数が実行されます。 – canon

答えて

6

最初に実行すると、100msごとに1つの間隔が実行されます。

2回目の実行では、2つの間隔があり、それぞれ100msごとに実行されます。

など。

これらは同じ変数を共有しているため、出力速度を100msごとに1回ずつ増加させるだけです。


次のいずれかをあなたが

  • はそう、彼らは複数の間隔の間で共有されていないtalkyへの引数としてグローバル変数を渡し終えた

    • コールclearInterval(...)
    • だけで変数を更新talkyを再度呼び出す代わりに
  • +0

    これで問題は分かりましたが、clearIntervalの使い方はあまり分かりません。私はtalkyを実行するたびに手動で呼び出す必要がありますか?私はtalkyの中のどこかにそれを挿入すべきですか?申し訳ありませんが、私は馬鹿のように聞こえるが、私はまだまったく新しくコーディングしています(いくつかのコンセプトを簡単に理解しているように見えますが、間隔などの他のものは私の頭の上にあります)。 – twondai

    +0

    " 、つまりif(charinc Quentin

    3

    setIntervalは、それによって定義された関数をあなたのケースで100msごとに実行させます。あなたが言うようにこの関数を何度か呼び出すと、互いに平行に走る複数の区間があります。これはおそらくあなたが望むものではありません。

    clearIntervalを使用して、IDがsetIntervalの場合、既存の間隔をクリアすることができます。

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

    関連する問題