classNameにactive、inactiveをつけて、opacityを変えます。また、addEventListenerで、クリックされた際に、Math.floor(Math.random() * (n + 1))で、ランダムな数値を取得し、配列に返し、それぞれの数字が一致するか、チェックして、opacityを変えます。実際のスロットは、もう少し複雑な設定方法だと思いますが、原理としては近いものがあるのではないでしょうか。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Slot Machine</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <style> body { background: #e0e0e0; font-family: Arial, sans-serif; text-align: center; font-size: 16px; margin-top: 30px; } .panel { display: inline-block; width: 60px; padding: 7px; border-radius: 5px; margin-bottom: 15px; color: #00aaff; font-weight: bold; font-size: 32px; line-height: 64px; background: #fff; } .panel + .panel { margin-left: 10px; } .panel.unmatched { opacity: 0.5; } .btn { display: inline-block; width: 60px; padding: 7px; border-radius: 5px; margin-bottom: 15px; color: #fff; box-shadow: 0 4px 0 #0088cc; background: #00aaff; cursor: pointer; } .btn + .btn { margin-left: 10px; } .btn.inactive{ opacity: 0.5; } #spinButton { margin: 0 auto; width: 240px; padding: 7px; border-radius: 5px; color: #fff; box-shadow: 0 4px 0 #e91b0c; background: #f44336; cursor: pointer; } #spin.inactive{ opacity: 0.5; } </style> </head> <body> <div> <div class="panel" id="panel0">?</div> <div class="panel" id="panel1">?</div> <div class="panel" id="panel2">?</div> </div> <div> <div class="btn inactive" id="btn0">STOP</div> <div class="btn inactive" id="btn1">STOP</div> <div class="btn inactive" id="btn2">STOP</div> </div> <div id="spinButton">SPIN</div> <script> (function(){ 'use strict'; var panels = ['1', '3', '5', '7']; var timers = []; var results = []; var stopCount = 0; var isPlaying = false; var panel0 = document.getElementById('panel0'); var panel1 = document.getElementById('panel1'); var panel2 = document.getElementById('panel2'); var btn0 = document.getElementById('btn0'); var btn1 = document.getElementById('btn1'); var btn2 = document.getElementById('btn2'); var spinButton = document.getElementById('spinButton'); spinButton.addEventListener('click', function(){ if (isPlaying) return; isPlaying = true; this.className = 'inactive'; btn0.className = 'btn'; btn1.className = 'btn'; btn2.className = 'btn'; panel0.className = 'panel'; panel1.className = 'panel'; panel2.className = 'panel'; runSlot(0, panel0); runSlot(1, panel1); runSlot(2, panel2); }); function runSlot(n, panel){ panel.innerHTML = panels[Math.floor(Math.random() * panels.length)]; timers[n] = setTimeout(function(){ runSlot(n, panel) }, 50); } btn0.addEventListener('click', function(){ stopSlot(0, panel0, this); }); btn1.addEventListener('click', function(){ stopSlot(1, panel1, this); }); btn2.addEventListener('click', function(){ stopSlot(2, panel2, this); }); function stopSlot(n, panel, btn){ if (!isPlaying || results[n] !== undefined) return; btn.className = 'btn inactive'; clearTimeout(timers[n]); results[n] = panel.innerHTML; stopCount++; if (stopCount === 3){ checkResults(); isPlaying = false; timers = []; results = []; stopCount = 0; spintButton.ClassName = ''; } } function checkResults(){ if (results[0] !== results[1] && results[0] !== results[2]) { panel0.className = 'panel unmatched'; } if (results[1] !== results[0] && results[1] !== results[2]) { panel1.className = 'panel unmatched'; } if (results[2] !== results[0] && results[2] !== results[1]) { panel2.className = 'panel unmatched'; } } })(); </script> </body> </html>