###実現したいこと
スタートボタンを押すとpairsで定義した全ての枚数のカードが裏返しになる。
###現状
スタートボタンを押しても何も変化なし。
###ソースコード
html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>Memory Game</title> <link rel="stylesheet" href="css/styles.css"> </head> <body> <div class="container"> <div id="score">0.00</div> <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 id="btn">スタート</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: 360px; margin: 20px auto; } #stage { display: flex; flex-wrap: wrap; } .card-container { perspective: 100px; width: 50px; 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; box-shadow: 0 5px 0 rgba(0, 0, 0, 0.2); } .card-back { background: #f1c40f; color: #fff; } .card-back:hover { opacity: 0.8; } .card-front { background: #fff; color: #f1c40f; transform: rotateY(180deg); } .card.open { transform: rotateY(180deg); } .container div { display: inline-block; } .container p { font-size: 20px; color: #fff; text-align: left; margin: 0 5px 10px 0; width: 150px: } #score { font-size: 20px; color: #fff; text-align: right; margin: 0 5px 10px 0; width: 150px: } #btn { background: gray; color: #fff; height: 40px; border-radius: 20px; line-height: 40px; text-align: center; font-size: 18px; margin: 15px auto 0; box-shadow: 0 5px 0 rgba(0, 0, 0, 0.2); width: 300px; cursor: pointer; }
js
(function() { 'use strict'; var pairs = 2; var cards = []; var flipCount = 0; var firstCard = null; var secondCard = null; var startTime; var isRunning = false; var correctCount = 0; var timeoutId; function init() { var i; var card; for (i = 1; i <= pairs; i++) { cards.push(createCard(i)); cards.push(createCard(i)); // document.getElementById('stage').appendChild(createCard(i)); // document.getElementById('stage').appendChild(createCard(i)); } 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); if (isRunning === true) { return; } isRunning = true; startTime = Date.now(); runTimer(); document.getElementById('restart').className = ''; }); container = document.createElement('div'); container.className = 'card-container'; container.appendChild(card); return container; } function flipCard(card) { if (firstCard !== null && secondCard !== null) { return; } if (card.className.indexOf('open') !== -1) { 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'; } else { correctCount++; if (correctCount === pairs) { clearTimeout(timeoutId); } } secondCard.removeEventListener('transitionend', check); firstCard = null; secondCard = null; } function runTimer() { document.getElementById('score').textContent = ((Date.now() - startTime) / 1000).toFixed(2); timeoutId = setTimeout(function() { runTimer(); }, 10); } init(); })(); //ここのコードです function startBtn(btn) { btn.addEventListener("click", function(){ card.className = "card open"; }); } startBtn(); //ここまで
どなたか、ご回答よろしくお願いいたします。
###追記
エラーメッセージは以下の通りです。画面をキャプチャしました。
ご確認お願いいたします。
https://i.gyazo.com/ad85ab2371a0e99421607a1d49f94c02.png
https://i.gyazo.com/ca8988669dc4ff155ec34705ed36eb45.png
皆様、本当にご丁寧なアドバイスありがとうございました。
皆様にベストアンサーを差し上げたいところですが、今回は実現したい内容をコードとして提示してくださった方をベストアンサーとさせていただきます。
本当にありがとうございました(>_<)
回答3件
あなたの回答
tips
プレビュー