2016-07-26 9 views
0

私は無作為な引用符/カラージェネレータに取り組んでいます。以前の色を繰り返さないようにしたい(私はJS/jQueryの完全な初心者なので、シンプルで簡単に理解できる方法で)。Math.randomの前の数を避ける簡単な方法は?

ここに私のコードがありますが、私は何が間違っているのか分かりません。

var colors = ["#8ee5ee", "#ee82ee", "#469649", "#ff4444", "#ffa500", "#dddddd", "#efc3c8", "#d2d449", "#f91589","#906161","#875d39","#ffdab9","#d1e529","#3a718b"]; 

    var color = Math.floor(Math.random() * colors.length); 

    var lastcolor = 0; 

    while(color === lastcolor){ 
    color = Math.floor(Math.random() * colors.length) + 1; 
    } 

    $("body").animate({backgroundColor: colors[color]}, 1000); 
    $("#new-quote").animate({backgroundColor: colors[color]}, 1000); 
    $("h6").fadeOut(1000); 
    $("p").fadeOut(1000); 

    }); 
    }); 

基本的に、私はボタン(#new-quote)、現在の背景色を別のランダムな色の変化などをクリックしたとき。しかし今は、マシンが現在の番号/色と同じ番号/色を選んだので、色は変わりません。私はそれを避けようとしている!

+1

何が間違っていますか? – k102

+0

ランダムな色が1つしかない場合、以前の色は何ですか? – nicael

+0

"ここに私のコードがありますが、何が間違っているのかわかりません。"なぜあなたは何かが間違っていると思いますか?間違いはありますか?質問は何ですか? –

答えて

1

私はあなたが提供したコードの周りにある種のループがあると思います。次に、色をリセットするのではなく、前の色に割り当てます。

var colors = ["#8ee5ee", "#ee82ee", "#469649", "#ff4444", "#ffa500", "#dddddd", "#efc3c8", "#d2d449", "#f91589","#906161","#875d39","#ffdab9","#d1e529","#3a718b"]; 

var color = Math.floor(Math.random() * colors.length); 

while(color === lastcolor){ 
    color = Math.floor(Math.random() * colors.length) + 1; 
} 

lastcolor = color; 

もちろん、スクリプトの冒頭にlastcolorを定義する必要があります。場所

var lastcolor = 0; 

<script>タグが開いた後です。

+0

あなたの答えをありがとう!ただし、lastcolor = colorを使用しても動作しません。私は何が間違っているのか分からない!これは上のコードです:$(document).ready(function(){ $( "#new-quote")on( "click"、function(){ –

+0

@Evan編集を参照してください – nicael

+0

ありがとう! –

0

新しい乱数値を追加すると、その乱数値が最後の要素のインデックスである場合は、未定義になる可能性があるため、単純に新しい乱数値を使用できます。

while (color === lastcolor){ 
    color = Math.floor(Math.random() * colors.length); // + 1; 
    //           without ^^^^^^^ 
} 

より良いスタイルは、do ... whileループを持つ1つの割り当てです。

var colors = ["#8ee5ee", "#ee82ee", "#469649", "#ff4444", "#ffa500", "#dddddd", "#efc3c8", "#d2d449", "#f91589", "#906161", "#875d39", "#ffdab9", "#d1e529", "#3a718b"], 
    color, 
    lastcolor = 0; 

do { 
    color = Math.floor(Math.random() * colors.length); 
} while(color === lastcolor); 

lastcolor = color; 
0

簡単な方法:使用splice()方法は、コードを実行するたびに、以前に発生した要素は文句を言わない再び起こるように、あなたのcolors配列から現​​在の要素を削除します。

var color = Math.floor(Math.random() * colors.length); 

//from index = color, delete that element using splice(index, # of elements to delete) 
colors.splice(color, 1); 
//now colors array will not contain the colors[color] element 

for (var i = 0; i < colors.length; i++) { 
    console.log(colors[i]); 
} 
関連する問題