2012-02-08 17 views
0

ランダムクォートジェネレータを作成しようとしています。私は別の関数pickQuoteを400msごとに実行するtimerという関数を作成しましたが、現時点ではこれはうまくいかないようです。 pickQuoteで乱数を生成する関数randomNumberGenを実行します。 randomNumberGenの私の問題は、新しい乱数が現在の引用符[randomNumber]と異なっているかどうかをチェックするifまたはif..elseを用意したいのですが、これを行う方法がわかりません。setIntervalと乱数生成で問題が発生する

私はこれをどのように達成できるかについて誰かに洞察力を提供することはできますか?

私の現在の努力はここで見ることができます:http://jsbin.com/aqinud/12/edit

答えて

3

index$.each外で定義されていません。 varを使用すると、関数内の変数にアクセスできません。

は、私は次のように機能を変更することをお勧めしているもの:

function randomNumberGen() { 

    //generate randomNumber based on length of array 
    // round it down (parseInt is for string->number conversion) 
    var thisRandomNumber = Math.floor(Math.random() * len); 

    if (randomNumber === thisRandomNumber) { 
    randomNumberGen(); 
    } else { 
    randomNumber = thisRandomNumber; 
    } 

} 

だから、最初の乱数を作成し、それがrandomNumberから違う場合にのみ、新しく作成されたものと、それを更新します。それ以外の場合は、再試行してください

はまた、setTimeout機能を必要とするので、まだそれを呼び出すことはありません。

runQuotePicker = setInterval(pickQuote, 400); 

http://jsbin.com/aqinud/13/edit

3

をおそらく、このような何か:

var currentNumber = -1; 
function randomNumberGen() { 
    var num = parseInt(Math.random() * (len)); 
    if(currentNumber != num){ 
    currentNumber = num; 
    return num; 
    } else { 
    return randomNumberGen(); 
    } 
} 

を私は「あなたは間違って渡されていた気づきましたpickQuote 'をsetIntervalに設定します。匿名関数でコールバックをラップしてみてください。

function timer() { 
    runQuotePicker = setInterval(function(){ 
    pickQuote(); 
    }, 1000); 
} 

そうでない場合は、あなたが今までに呼び出されるpickQuoteのはミリ秒xは結果をスケジュールしています。