2016-05-03 3 views
2

私はHTML、CSS、およびJavaScript(学習)を使って簡単なrgbゲームを作ろうとしています。私はこの 'if'文がうまくいかない理由を理解するのに助けが必要です

色をクリックすると、「正しい」または「間違った」と表示され、静的な値はcolors[3]として正しいです。私は複数のことをテストしました。数字と文字列や関係性とは関係がありますが、私は考えていません。色をクリックすると、正しい色(この場合は[3](シアン色))をクリックする代わりに、すべて「間違っている」という警告が表示されます。

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

var colors = [ 
 
    "rgb(255,0,0)", 
 
    "rgb(255,255,0)", 
 
    "rgb(0,255,0)", 
 
    "rgb(0,255,255)", 
 
    "rgb(0,0,255)", 
 
    "rgb(255,0,255)" 
 
] 
 

 
var squares = document.querySelectorAll(".square"); 
 
var pickedColor = colors[3]; 
 
console.log(pickedColor); 
 
var colorDisplay = document.querySelector("#colorDisplay"); 
 

 
colorDisplay.textContent = pickedColor; 
 

 
for (var i = 0; i < squares.length; i++){ 
 
    squares[i].style.background = colors[i]; 
 

 
    squares[i].addEventListener("click", function(){ 
 
     var clickedColor = this.style.background; 
 

 
     if(clickedColor === pickedColor){ 
 
     alert("correct"); 
 
     } else { 
 
     alert("wrong"); 
 
     } 
 
    }); 
 
}
body { 
 
    background-color: #232323; 
 
} 
 
.square { 
 
    width: 30%; 
 
    background: purple; 
 
    padding-bottom: 30%; 
 
    float: left; 
 
    margin: 1.66%; 
 
} 
 
#container { 
 
    margin: 0 auto; 
 
    max-width: 600px; 
 
} 
 
h1 { 
 
    color: white; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <title>Color Game</title> 
 
    <link rel="stylesheet" href="colorGame.css"> 
 
</head> 
 

 
<body> 
 
    <h1>The Great <span id="colorDisplay">RGB</span> Color Game</h1> 
 
    <div id="container"> 
 

 
     <div class="square"></div> 
 
     <div class="square"></div> 
 
     <div class="square"></div> 
 
     <div class="square"></div> 
 
     <div class="square"></div> 
 
     <div class="square"></div> 
 

 
    </div> 
 
    <script type="text/javascript" src="colorGame.js"></script> 
 
</body> 
 

 
</html>

+2

ようこそ!何かがうまくいかないと言ったら、実際に何が働いていないのか教えてください。考えられない振る舞いが起こっていますか?コンソールでエラーが発生していますか? – azium

+0

最初に追加します。基本的には、正しい色(この場合は[3](シアン色))をクリックする代わりに、色をクリックすると「間違っている」という警告が表示されます。コンソールにエラーはありません。 – nateph

+0

コンソール出力に 'clickedcolor'と' pickedcolor'の両方を行い、違いが –

答えて

1

私の知る限り考え出したとして、それは値文字列のフォーマットを持つだけの問題です。 pickedColorには、rgb値の間にスペースがあります。

var colors = [ 
    "rgb(255, 0, 0)", 
    "rgb(255, 255, 0)", 
    "rgb(0, 255, 0)", 
    "rgb(0, 255, 255)", 
    "rgb(0, 0, 255)", 
    "rgb(255, 0, 255)" 
] 
1

clickedColorに空白が含まれ、pickedColorが2つの文字列を比較しています。またはpickedColorにスペースを入れるかのようにclickedColorの空白を削除します。これを使用して、あなたが行ってもいいだろう

var colors = [ 
    "rgb(255,0,0)", 
    "rgb(255,255,0)", 
    "rgb(0,255,0)", 
    "rgb(0,255,255)", 
    "rgb(0,0,255)", 
    "rgb(255,0,255)" 
] 

var squares = document.querySelectorAll(".square"); 
var pickedColor = colors[3]; 
console.log(pickedColor); 
var colorDisplay = document.querySelector("#colorDisplay"); 

colorDisplay.textContent = pickedColor; 

for (var i = 0; i < squares.length; i++){ 
    squares[i].style.background = colors[i]; 

    squares[i].addEventListener("click", function(){ 
     var clickedColor = this.style.background; 

     if(clickedColor.replace(/ /g,'') === pickedColor){ 
     alert("correct"); 
     } else { 
     alert("wrong"); 
     } 
    }); 
} 
+0

ありがとうございます!私はrgb仕様書の形式について知らなかった。 – nateph

1
var colors = [ 
    "rgb(255, 0, 0)", 
    "rgb(255, 255, 0)", 
    "rgb(0, 255, 0)", 
    "rgb(0, 255, 255)", 
    "rgb(0, 0, 255)", 
    "rgb(255, 0, 255)" 
] 

。あなたはthis.background.styleから得られる出力に余分なスペースがあります。

+0

ありがとう!私はrgb仕様書の形式について知らなかった。 – nateph

1

あなたの比較の仕方のため、このゲームは正しく動作しません。ブラウザには多くの癖があり、その1つはプロパティの解釈方法です。例えば

、あなたは、これら二つの特性が同じであることを前提としています:
this.style.background
this.style.background-color

しかし、ブラウザによっては、あなたが間違っているか、右にある可能性があります。 IEは特に矛盾しており、頻繁にthis.style.backgroundに変更してもbackground-colorに影響しないため、background:red;を設定してもbackground-colorは赤色ではありません。また、background-colorrgb(255,0,0)、またはred、または#ff0000に等しいことを意味しません。それは非常に予測不可能です。

このゲームを動作させるには、という正規化を実行する必要があります。つまり、red#ff0000#f00rgba(255,0,0)rgba(255,0,0,1)rgb(255 , 0 ,0)を処理できる関数を作成し、正しく比較できる1つの特定の形式に変換することを意味します。

+0

ありがとうございました!私はrgb仕様書の形式について知らなかった。 – nateph

0

色の配列にコンマの後にスペースを入れる必要があります。

var colors = [ 
"rgb(255, 0, 0)", 
"rgb(255, 255, 0)", 
"rgb(0, 255, 0)", 
"rgb(0, 255, 255)", 
"rgb(0, 0, 255)", 
"rgb(255, 0, 255)"] 
関連する問題