0

次のコードがここで定義された色の配列を循環しない理由を誰か教えてください:

var colors = ["white", "yellow", "orange", "red"];

問題のコード行は次のとおりです。

setInterval(function(){
          currElm.style.background = colors[(nextColor++)%(colors.length)]);
      }, 500);

それはうまくいくように思われ、このようなコードがカラー サイクリング エフェクトを生成する例をいくつか見てきました。上記 (または以下) のコードに問題がある人はいますか?

関数全体 (進行中の作業):

function setHighlight(elmId, index, songLength){
//alert("called set highlight, params are " + elmId + " " + index + " " + songLength);
var colors = ["white", "yellow", "orange", "red"];
var nextColor = 0;
if(index < 10)
    index = "000" + (index);
  else if (index < 100)
    index = "000" + (index);
  else if(index < 1000)
    index = "0" + (index);
  if(index >= 1000)
    index = index;
//alert("called set highlight, params are " + elmId + " " + index + " " + songLength);

//this will be useful for finding the element but pulsate will not work, need to       research animations in javascript

var mainElm = document.getElementById('active_playlist');
var elmIndex = "";

for(var currElm = mainElm.firstChild; currElm !== null; currElm = currElm.nextSibling){
  if(currElm.nodeType === 1){

  var elementId = currElm.getAttribute("id");

  if(elementId.match(/\b\d{4}/)){

    elmIndex = elementId.substr(0,4);
    alert(currElm.getAttribute('id'));

    if(elmIndex == index){
        setInterval(function(){
          currElm.style.background = colors[(nextColor++)%(colors.length)]);
      }, 500);
    }
  }
}
}//end for

}

すべてのヘルプは大歓迎です。ありがとう

4

3 に答える 3

1

')'構文エラー、行末に余分な右括弧があります:

currElm.style.background = colors[(nextColor++)%(colors.length)]);
于 2009-06-24T02:28:39.840 に答える
1

いくつかの異なること。まず、id にスペースとそれに続く 4 桁の要素が一致しているようです。ID にスペースを使用することは許可されていないと思います。一致させる必要がある要素の HTML を確認したいと思います。2 番目に、 setInterval ハンドラでキャプチャされる新しい変数に currElm を割り当てたいと思います。そうしないと、一致した各要素ではなく、最後に一致した要素を常に参照する可能性があると思います。

for(var currElm = mainElm.firstChild; currElm !== null; currElm = currElm.nextSibling){

  if(currElm.nodeType === 1){

    var elementId = currElm.getAttribute("id");

    if(elementId.match(/\b\d{4}/)){

      elmIndex = elementId.substr(0,4);
      alert(currElm.getAttribute('id'));

      if(elmIndex == index){
          var that = currElm;
          setInterval(function(){
              that.style.background = colors[(nextColor++)%(colors.length)];
          }, 500);
      }
    }
  }

}//end for

EDITまた、間隔ハンドラの余分な括弧を修正します。

于 2009-06-24T02:29:38.857 に答える
0

余分な右括弧も表示されます!

ただし、nextColor 変数は、colors 配列の直後ですでにゼロに初期化されています。

これは Firebug のジョブです。setInterval 呼び出しに到達する直前にブレークポイントを設定し、setInterval の無名関数にあるさまざまな変数をテストできます。

于 2009-06-24T02:32:19.507 に答える