網頁時鐘

周文豪發表於2024-10-10

效果如下:

程式碼如下:

<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>現代風格時鐘</title>
  <style>
    body {
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
      margin: 0;
      font-family: Arial, sans-serif;
      background-color: #f0f0f0;
      transition: background-color 0.5s;
    }
    .clock-container {
      display: flex;
      flex-direction: column;
      align-items: center;
    }
    .clock {
      position: relative;
      width: 200px;
      height: 200px;
      /*將正方形變為圓形*/
      border-radius: 50%;
      background-color: white;
      border: 1px solid black;
      /*新增陰影*/
      box-shadow: 0 0 20px rgba(0,0,0,0.1);
    }
    /*實現時針、分針、秒針繞圓心轉動*/
    .hand {
      /*圓心定位*/
      position: absolute;
      bottom: 50%;
      left: 50%;
      /* 設定旋轉元素的基點位置 ,即旋轉軸的位置*/
      transform-origin: 50% 100%;
      /*倒圓角*/
      border-radius: 5px;
    }
    /*時針*/
    .hour {
      width: 4px;
      height: 50px;
      background-color: #333;
    }
    /*分針*/
    .minute {
      width: 3px;
      height: 70px;
      background-color: #666;
    }
    /*秒針*/
    .second {
      width: 2px;
      height: 90px;
      background-color: #e74c3c;
    }
    .center {
      position: absolute;
      top: 50%;
      left: 50%;
      width: 10px;
      height: 10px;
      border-radius: 50%;
      background-color: #333;
      transform: translate(-50%, -50%);
    }
    .digital-time {
      font-size: 48px;
      margin-top: 20px;
      color: #333;
    }
    .mode-switch {
      margin-top: 20px;
      padding: 10px 20px;
      font-size: 16px;
      cursor: pointer;
      background-color: #333;
      color: white;
      border: none;
      border-radius: 5px;
      transition: background-color 0.3s;
    }
    .mode-switch:hover {
      background-color: #555;
    }
    .night-mode {
      background-color: #222;
    }
    .night-mode .clock {
      background-color: #333;
      box-shadow: 0 0 20px rgba(255,255,255,0.1);
    }
    .night-mode .hour, .night-mode .minute {
      background-color: #fff;
    }
    .night-mode .second {
      background-color: #e74c3c;
    }
    .night-mode .center {
      background-color: #fff;
    }
    .night-mode .digital-time {
      color: #fff;
    }
    .night-mode .mode-switch {
      background-color: #f0f0f0;
      color: #333;
    }
    .night-mode .mode-switch:hover {
      background-color: #ddd;
    }
  </style>
</head>
<body>
<div class="clock-container">
  <div class="clock">
    <div class="hand hour"></div>
    <div class="hand minute"></div>
    <div class="hand second"></div>
    <div class="center"></div>
  </div>
  <div class="digital-time"></div>
  <button class="mode-switch">Dark mode</button>
</div>

<script>
  function updateClock() {
    const now = new Date();
    const hours = now.getHours();
    const minutes = now.getMinutes();
    const seconds = now.getSeconds();

    const hourDeg = (hours % 12 + minutes / 60) * 30; // 總共360度,一圈是12個小時,那麼一個小時30度
    const minuteDeg = (minutes + seconds / 60) * 6; // 總共360度,一圈是60分鐘,那麼一分鐘6度
    const secondDeg = seconds * 6; // 總共360度,一圈是60秒,那麼一秒鐘6度
    // 讓時針轉動
    document.querySelector('.hour').style.transform = `translateX(-50%) rotate(${hourDeg}deg)`;
    // 讓分針轉動
    document.querySelector('.minute').style.transform = `translateX(-50%) rotate(${minuteDeg}deg)`;
    // 讓秒針轉動
    document.querySelector('.second').style.transform = `translateX(-50%) rotate(${secondDeg}deg)`;
    // 顯示時間
    const digitalTime = `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')} ${hours >= 12 ? 'PM' : 'AM'}`;
    document.querySelector('.digital-time').textContent = digitalTime;
  }
  // 切換模式
  function toggleMode() {
    // 使用document.body.classList.toggle('night-mode');的時候,當前元素body有'night-mode'這個類名時刪除這個類名,反之沒有這個類名則新增這個類名到classList的後面
    document.body.classList.toggle('night-mode');
    const button = document.querySelector('.mode-switch'); // 選擇按鈕
    button.textContent = document.body.classList.contains('night-mode') ? 'Light mode' : 'Dark mode';  // 修改內容
  }

  setInterval(updateClock, 1000); // 1000毫秒,即1s鍾執行一次
  // updateClock(); // 立即更新一次,避免延遲
  // 監聽單擊事件,即單擊就切換模式
  document.querySelector('.mode-switch').addEventListener('click', toggleMode);
</script>
</body>
</html>

相關文章