HTML 古硬幣旋轉動畫程式(coin-animation)

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>

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *