HTML 古硬幣旋轉動畫程式(coin-animation)
HTML 古硬幣旋轉動畫程式(coin-animation)
資料來源:圖片(chatgpt)+網頁程式(copilot)
GITHUB: https://github.com/jash-git/coin-animation
coin-animation00 單純硬幣旋轉
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>硬幣旋轉動畫</title> <style> /* 硬幣容器樣式 */ .coin-container { perspective: 1000px; width: 200px; /* 容器寬度 */ height: 200px; /* 容器高度 */ margin: 50px auto; /* 置中 */ } /* 硬幣樣式 */ .coin { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; animation: rotate 3s infinite linear; /* 旋轉動畫 */ } /* 硬幣的正面與背面 */ .front, .back { position: absolute; width: 100%; height: 100%; background-size: cover; backface-visibility: hidden; } /* 正面樣式 */ .front { background-image: url('./01.png'); /* 替換為正面圖片 */ } /* 背面樣式 */ .back { background-image: url('./02.png'); /* 替換為背面圖片 */ transform: rotateY(180deg); } /* 旋轉動畫 */ @keyframes rotate { from { transform: rotateY(0deg); } to { transform: rotateY(360deg); } } </style> </head> <body> <div class="coin-container"> <div class="coin"> <div class="front"></div> <div class="back"></div> </div> </div> <script> const coin = document.querySelector('.coin'); // 暫停旋轉 coin.addEventListener('mouseover', () => { coin.style.animationPlayState = 'paused'; }); // 繼續旋轉 coin.addEventListener('mouseout', () => { coin.style.animationPlayState = 'running'; }); </script> </body> </html>
coin-animation01 一次五個硬幣旋轉 並在五秒後停止並記錄正反面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>硬幣旋轉與結果記錄</title> <style> /* 硬幣容器樣式 */ .coin-container { display: flex; justify-content: center; gap: 20px; margin-top: 30px; } /* 硬幣樣式 */ .coin { width: 100px; height: 100px; position: relative; transform-style: preserve-3d; } /* 硬幣的正面與背面 */ .front, .back { position: absolute; width: 100%; height: 100%; background-size: cover; backface-visibility: hidden; } /* 正面樣式 */ .front { background-image: url('./01.png'); /* 替換為正面圖片 */ } /* 背面樣式 */ .back { background-image: url('./02.png'); /* 替換為背面圖片 */ transform: rotateY(180deg); } /* 旋轉動畫 */ @keyframes rotate { from { transform: rotateY(0deg); } to { transform: rotateY(360deg); } } /* 結果顯示區域樣式 */ .results { margin-top: 20px; text-align: center; } </style> </head> <body> <button id="rotate-button">開始旋轉</button> <div class="coin-container" id="coin-container"> <div class="coin"> <div class="front"></div> <div class="back"></div> </div> <div class="coin"> <div class="front"></div> <div class="back"></div> </div> <div class="coin"> <div class="front"></div> <div class="back"></div> </div> <div class="coin"> <div class="front"></div> <div class="back"></div> </div> <div class="coin"> <div class="front"></div> <div class="back"></div> </div> </div> <div class="results" id="results"> <h3>硬幣結果:</h3> <ul id="result-list"></ul> </div> <script> const coins = document.querySelectorAll('.coin'); const button = document.getElementById('rotate-button'); const resultList = document.getElementById('result-list'); button.addEventListener('click', () => { resultList.innerHTML = ''; // 清空之前的結果 // 讓所有硬幣開始旋轉 coins.forEach(coin => { coin.style.animation = 'rotate 1s infinite linear'; // 設置旋轉動畫 }); // 5秒後隨機停止旋轉並記錄結果 setTimeout(() => { coins.forEach((coin, index) => { coin.style.animation = ''; // 移除動畫以停止旋轉 const isFront = Math.random() < 0.5; // 隨機生成正面或背面 const rotation = isFront ? 'rotateY(0deg)' : 'rotateY(180deg)'; coin.style.transform = rotation; // 設定硬幣的最終狀態 // 記錄結果 const resultItem = document.createElement('li'); resultItem.textContent = `硬幣 ${index + 1}: ${isFront ? '正面' : '背面'}`; resultList.appendChild(resultItem); }); }, 5000); }); </script> </body> </html>