カクテルの神経衰弱とは、トマトジュースとウォッカがめくられたら、ブラッディマリーとして正解とするような感じです。
ドットインストールの神経衰弱は数字でしたが、カクテルの神経衰弱を作りたくて文字にしました。そうしたら、判定部分で躓いてます。
textContentで文字を取得できるという認識で合ってますか?
JSをこのように改良しました。
if ( firstCard.children[0].textContent == 'トマトジュース' && secondCard.children[0].textContent == 'ウォッカ' )
構成はHTML、CSS、JavaScript(以下,JSとします)です。
HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Memory Game</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="container"> <div id="stage"> <!-- <div class="card-container"> <div class="card"> <div class="card-front">1</div> <div class="card-back">?</div> </div> </div> --> </div> </div> <script src="js/main.js"></script> </body> </html>
CSS
body { background: #3498db; font-family: Arial, sans-serif; font-size: 16px; font-weight: bold; } .container { width: 480px; margin: 20px auto; } #stage { display: flex; flex-wrap: wrap; } .card-container { perspective: 100px; width: 150px; height: 70px; margin: 5px; } .card { cursor: pointer; width: 100%; height: 100%; transition: 0.8s; position: relative; transform-style: preserve-3d; } .card-front, .card-back { width: 100%; height: 100%; text-align: center; line-height: 70px; border-radius: 8px; position: absolute; top: 0; left: 0; backface-visibility: hidden; } .card-back { background: #f1c40f; color: #fff; } .card-front { background: #fff; color: #f1c40f; transform: rotateY(180deg); } .card.open { transform: rotateY(180deg); }
JS
(function() { 'use strict'; var pairs = 2; var cards = []; var flipCount = 0; var firstCard = null; var secondCard = null; function init() { // var i; var card; // for (i = 1; i <= pairs; i++) { cards.push(createCard('トマトジュース')); cards.push(createCard('ウォッカ')); cards.push(createCard('ルジェカシス')); cards.push(createCard('オレンジジュース')); // document.getElementById('stage').appendChild(createCard('トマトジュース')); // document.getElementById('stage').appendChild(createCard('ウォッカ')); // document.getElementById('stage').appendChild(createCard('ルジェカシス')); // document.getElementById('stage').appendChild(createCard('オレンジジュース')); // document.getElementById('stage').appendChild(createCard('ピーチツリー')); // document.getElementById('stage').appendChild(createCard('ソーダ')); // } while (cards.length) { card = cards.splice(Math.floor(Math.random() * cards.length), 1)[0]; document.getElementById('stage').appendChild(card); } } function createCard(num) { var container; var card; var inner; inner = '<div class="card-front">' + num + '</div><div class="card-back">?</div>'; card = document.createElement('div'); card.innerHTML = inner; card.className = 'card'; card.addEventListener('click', function() { flipCard(this); }); container = document.createElement('div'); container.className = 'card-container'; container.appendChild(card); return container; } function flipCard(card) { if (firstCard !== null && secondCard !== null) { return; } card.className = 'card open'; flipCount++; if (flipCount % 2 === 1) { firstCard = card; } else { secondCard = card; secondCard.addEventListener('transitionend', check); } } function check() { if ( firstCard.children[0].textContent == 'トマトジュース' && secondCard.children[0].textContent == 'ウォッカ' ) { firstCard.className = 'card'; secondCard.className = 'card'; } secondCard.removeEventListener('transitionend', check); firstCard = null; secondCard = null; } init(); })();
check関数の元は、
function check() { if ( firstCard.children[0].textContent !== secondCard.children[0].textContent ) { firstCard.className = 'card'; secondCard.className = 'card'; } secondCard.removeEventListener('transitionend', check); firstCard = null; secondCard = null; }
参考
textContent は Node のプロパティで、ノードおよびその子孫のテキストの内容を表します。
回答2件
あなたの回答
tips
プレビュー