1

基本的には、私の小さなターミナル Web アプリのジャンキー xD のために、タイプライター スクリプトをゼロから作成しようとしました。

さて、私はこのJavaScriptのものを持っています:

var str = "dude";
var num = 1000;
for (var i = 0, len = str.length; i < len; i++) {
var num = num + 100;
var dude = str[i];
setTimeout('document.getElementById("guide").innerHTML +=dude;', num);
}

これは明らかに、「d」「u」「d」「e」を 100 ミリ秒間隔で a に書き込みますが、divID guideだと思いますか?

そんなことはありません!!

今、それは何をしているのか、文字列内の文字の数だけ「e」を出力します、おい!!

:|

ありがとうございました、

私はおそらく超バカです

しかし、私は修正が大好きです!

前もって感謝します!

4

2 に答える 2

1

text と time の 2 つのパラメーターを受け入れる小さな関数を作成しました。

function defiredWriteText(text,time, index){
    if(index === null || index === undefined) {
        index=0;
    }
    setTimeout(function (){
        var dude = text[index];
        document.getElementById("guide").innerHTML += dude;
        if(index < text.length-1)
            defiredWriteText(text, time, ++index);
    }, time)
}

サンプル: http://jsfiddle.net/3e3yx/

于 2013-03-07T06:08:34.453 に答える
1

次のように setTimeout で関数を呼び出したい場合があります。

var str = "dude";
var num = 1000;
for (var i = 0, len = str.length; i < len; i++) {
  var num = num + 100;
  var dude = str[i];
  setTimeout(function() {
    document.getElementById("guide").innerHTML +=dude;
  }, num);
}

また

var str = "dude";
var num = 1000;
for (var i = 0, len = str.length; i < len; i++) {
  var num = num + 100;
  var dude = str[i];
  setTimeout(changeHtml, num);
}

function changeHtml() {
  document.getElementById("guide").innerHTML +=dude;
}

より正確な 100 ミリ秒の間隔が必要な場合は、setInterval を使用することをお勧めします

var myInterval = setInterval(changeHtml, 100);
var len = str.length;
var current = 0;

function changeHtml() {
  if(current < len) {
    document.getElementById("guide").innerHTML +=str[current];
  }
  else {
    clearInterval(myInterval);
  }
  current++;
}
于 2013-03-07T05:56:04.947 に答える