0

私はいくつかの小さなものが欠けています..配列を出力しますが、行の間に待機しません。

<script type="text/javascript">

function showLines()
{
arr =
[
  "Hi!",
  "Welcome!",
  "Hello!"
]

var duration=2000;

document.getElementById("quotes").innerHTML=arr;
setTimeout('showLines()',duration);

}
</script>
4

5 に答える 5

2

これは、配列全体を印刷するだけなので、これを試してください。

    function showLines(_index) {
       var arr =["Hi!", "Welcome!", "Hello!"], html = '', i, index = _index || 0,
       newIndex;

       for (i = 0; i < index && i < arr.length; ++i) {
          html += arr[i] + "<br />";
       }
       document.getElementById("quotes").innerHTML=html;

       newIndex = index + 1;
       if (newIndex < arr.length) {
          setTimeout(function() {showLines(newIndex);}, 2000);
       }
    }

それでうまくいくはずです。

一度に1つだけ必要な場合は、交換してください

           for (i = 0; i < index && i < arr.length; ++i) {
              html += arr[i] + "<br />";
           }

document.getElementById("quotes").innerHTML=arr[index];
于 2011-07-20T22:53:59.843 に答える
1

この線

document.getElementById("quotes").innerHTML=arr;

カンマで結合してに変換arrします。Stringしたがって、あなたは見るでしょう

こんにちは!、ようこそ!、こんにちは!

この関数はべきであり、おそらくあなたが望んでいるものではありません。不足しているのは、次に関数が実行されたときに配列のどの要素にあるかを知らせ、要素の内容をquotes配列内の次の項目に置き換えるインデックスだと思います。

于 2011-07-20T23:02:14.500 に答える
0

あなたは彼に待つように頼んだことはありません。2秒ごとに同じ関数を呼び出しているだけです。showLines(i)、innerHTML + = arr [i]、およびsetTimeout(showLines、duration、i ++)を試してください

<script type="text/javascript">

function showLines(i)
{
arr =
[
  "Hi!",
  "Welcome!",
  "Hello!"
]

var duration=2000;

document.getElementById("quotes").innerHTML += arr[i];
i++;
setTimeout(showLines,duration,i);

}
</script>
于 2011-07-20T22:54:00.937 に答える
0

ここでのほとんどの答えは、反復ごとに配列を再初期化することです。それを行うのは意味がありません。あなたはこのようにそれをするべきです:

<script type="text/javascript">

function showLines(){

    var arr =
    [
      "Hi!",
      "Welcome!",
      "Hello!"
    ], i = 0;

    (function showLinesHelper(){
        document.getElementById("quotes").innerHTML += arr[i++]+'<br />';
        if(i < arr.length)
            setTimeout(showLinesHelper, 2000);
    })();

}

</script>

このように動作し、配列とiは一度だけ初期化されます。

コメントに応じて編集:

<script type="text/javascript">

function showLines(){

    var arr =
    [["Hi!", 3000],
     ["Welcome!", 500],
     ["Hello!", 1000]]
    , i = 0;

    function showLinesHelper(){
        document.getElementById("quotes").innerHTML += arr[i++][0]+'<br />';
        if(i < arr.length)
            setTimeout(showLinesHelper, arr[i][1]);
    }

    setTimeout(showLinesHelper, arr[0][1]);
}

</script>
于 2011-07-20T23:14:27.823 に答える
-1

まず、コードをonloadordomready関数でラップする必要があります。jQueryはこれが得意です。これを行うにはを使用window.onload = myfunc;する必要があります。

コードは次のようになります。

<script type="text/javascript">
  var init = function () {
    var myarray = ["Hi!","Welcome!","Hello!"], index = 0, printline = function () {
      document.getElementById("quotes").innerHTML += myarray[index];

      if (index + 1 < myarray.length) {
        setTimeout(printline, 2000);
      }  
      index++;
    };
    printline();
  }
  window.onload = init;

</script>
于 2011-07-20T23:02:50.303 に答える