【JavaScript】クリックした後の結果を切り替えたい|datasetを使う
前回のコードを利用して、以下の仕様のゲームを作成していきます。
ゲームの仕様
- 5つの無地divが並んでいる。
- clickすると1/5の確率で当たり、4/5の確率で外れが出る。
- 結果は回によって変わる。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <body> </body>
body{ display: flex; flex-wrap: wrap; } .box{ width: 100px; height: 100px; background: skyblue; cursor: pointer; transition: 0.8s; margin-right: 10px; margin-bottom: 10px; text-align: center; line-height: 100px; } .circle{ border-radius: 50%; background-color: pink; transform: rotate(360deg); }
'use strict'; const num = 5; // 0-4の数字が入ることを示唆 const winner = Math.floor(Math.random() * num); //0-4 ★ for(let i = 0 ; i < num ; i ++){ const div = document.createElement('div'); if(i === winner){ div.dataset.result = 'win' ★ }else{ div.dataset.result = 'lose' ★ } div.classList.add('box'); div.addEventListener('click', function(){ if (div.dataset.result === 'win') { div.textContent = 'WIN!'; }else{ div.textContent = 'LOSE'; } div.classList.toggle('circle'); }); document.body.appendChild(div); };
これで以下のようなゲームが完成。
↓
Math.floor(Math.random() * num); について
Math.floorとは、引数の数字の小数点以下を切り下げて整数で返してくれるもの。
Math.floor() - JavaScript | MDN
Math.random()とは、0以上1未満の不動小数点を返してくれるもの。
この場合には、numに入る数字に0-0.9999....の数字を掛けてくれている。
Math.random() - JavaScript | MDN
div.dataset.result = 'win' について
この場合の挙動としては、
<div data-result='win'></div>
という結果になる。
data属性を指定した要素に与えるためのメソッドである。
HTMLElement.dataset - Web API | MDN
function(){ if (div.dataset.result === 'win') { div.textContent = 'WIN!'; }else{ div.textContent = 'LOSE'; } div.classList.toggle('circle'); });
上記の部分で、もしdatasetがwinだった場合には、textContentでwinという文字列を、datasetがloseだった場合、loseという文字列を付け加えるという形になっている。