테스트 사이트 - 개발 중인 베타 버전입니다

디지털과 아날로그가 결합된 시계

· 6개월 전 · 1532 · 5

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 5개

6개월 전

과제인가

6개월 전

좋은데요 한번 만들어 보구 싶은 생각이 절로드네 ㅎㅎㅎ

6개월 전

claude로 만들었습니다. 재미있네요.

 

[code]

<!DOCTYPE html>
<html lang="ko">
<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;
      background-color: #f0f0f0;
      font-family: 'Arial', sans-serif;
    }
    
    .clock {
      position: relative;
      width: 400px;
      height: 400px;
      border: 10px solid #333;
      border-radius: 50%;
      background-color: #fff;
      box-shadow: 0 0 20px rgba(0, 0, 0, 0.2);
    }
    
    .center {
      position: absolute;
      top: 50%;
      left: 50%;
      width: 12px;
      height: 12px;
      background-color: #333;
      border-radius: 50%;
      transform: translate(-50%, -50%);
      z-index: 10;
    }
    
    .number-marker {
      position: absolute;
      font-size: 18px;
      font-weight: bold;
      text-align: center;
      width: 30px;
      height: 30px;
      line-height: 30px;
      transform: translate(-50%, -50%);
    }
    
    .hour-hand, .minute-hand, .second-hand {
      position: absolute;
      top: 50%;
      left: 50%;
      transform-origin: 0% 0%;
      z-index: 5;
    }
    
    .hour-hand span, .minute-hand span, .second-hand span {
      position: absolute;
      transform: translate(-50%, -50%);
      text-align: center;
    }
    
    .hour-hand span {
      color: #333;
      font-size: 16px;
      font-weight: bold;
    }
    
    .minute-hand span {
      color: #666;
      font-size: 14px;
      font-weight: bold;
    }
    
    .second-hand span {
      color: #f00;
      font-size: 12px;
      font-weight: bold;
    }
  </style>
</head>
<body>
  <div class="clock">
    <!-- 시계 숫자 마커 -->
    <div id="clock-numbers"></div>
    
    <!-- 시침 -->
    <div id="hour-hand" class="hour-hand"></div>
    
    <!-- 분침 -->
    <div id="minute-hand" class="minute-hand"></div>
    
    <!-- 초침 -->
    <div id="second-hand" class="second-hand"></div>
    
    <div class="center"></div>
  </div>

  <script>
    // 시계 숫자 생성 (1-12)
    const clockNumbers = document.getElementById('clock-numbers');
    for (let i = 1; i <= 12; i++) {
      const number = document.createElement('div');
      number.className = 'number-marker';
      number.textContent = i;
      
      // 각도 계산 (12시가 상단 중앙)
      const angle = (i * 30 - 90) * (Math.PI / 180);
      const radius = 170; // 시계 반지름
      const x = radius * Math.cos(angle) + 200;
      const y = radius * Math.sin(angle) + 200;
      
      number.style.left = x + 'px';
      number.style.top = y + 'px';
      clockNumbers.appendChild(number);
    }
    
    // 시계 바늘 요소
    const hourHand = document.getElementById('hour-hand');
    const minuteHand = document.getElementById('minute-hand');
    const secondHand = document.getElementById('second-hand');
    
    // 시계 업데이트 함수
    function updateClock() {
      const now = new Date();
      const hours = now.getHours() % 12 || 12; // 12시간제
      const minutes = now.getMinutes();
      const seconds = now.getSeconds();
      
      // 기존 바늘 내용 제거
      hourHand.innerHTML = '';
      minuteHand.innerHTML = '';
      secondHand.innerHTML = '';
      
      // 시침, 분침, 초침 회전 각도 계산 (12시가 상단 중앙에 오도록)
      const hourAngle = ((hours * 30) + (minutes * 0.5) - 90);
      const minuteAngle = (minutes * 6 - 90);
      const secondAngle = (seconds * 6 - 90);
      
      // 시침용 숫자 생성 및 배치 (시간 * 3)
      const hourMaxLength = 120; // 최대 길이
      for (let i = 0; i < 3; i++) {
        const hourSpan = document.createElement('span');
        hourSpan.textContent = hours;
        
        // 각 숫자의 위치 계산 (더 좁은 간격으로)
        // 시작 위치를 20%로 하여 중심에서 너무 멀지 않게 설정
        const distanceFactor = 0.2 + (i * 0.3); // 0.2, 0.5, 0.8 위치에 배치
        const distance = hourMaxLength * distanceFactor;
        
        // 위치 계산 및 설정
        const hourRadians = hourAngle * (Math.PI / 180);
        const hx = distance * Math.cos(hourRadians);
        const hy = distance * Math.sin(hourRadians);
        
        hourSpan.style.left = hx + 'px';
        hourSpan.style.top = hy + 'px';
        hourHand.appendChild(hourSpan);
      }
      
      // 분침용 숫자 생성 및 배치 (분 * 5)
      const minuteMaxLength = 150; // 최대 길이
      for (let i = 0; i < 5; i++) {
        const minuteSpan = document.createElement('span');
        minuteSpan.textContent = minutes;
        
        // 각 숫자의 위치 계산 (더 좁은 간격으로)
        // 시작 위치를 20%로 하여 중심에서 너무 멀지 않게 설정
        const distanceFactor = 0.2 + (i * 0.15); // 0.2, 0.35, 0.5, 0.65, 0.8
        const distance = minuteMaxLength * distanceFactor;
        
        // 위치 계산 및 설정
        const minuteRadians = minuteAngle * (Math.PI / 180);
        const mx = distance * Math.cos(minuteRadians);
        const my = distance * Math.sin(minuteRadians);
        
        minuteSpan.style.left = mx + 'px';
        minuteSpan.style.top = my + 'px';
        minuteHand.appendChild(minuteSpan);
      }
      
      // 초침용 숫자 생성 및 배치 (초 * 7)
      const secondMaxLength = 180; // 최대 길이
      for (let i = 0; i < 7; i++) {
        const secondSpan = document.createElement('span');
        secondSpan.textContent = seconds;
        
        // 각 숫자의 위치 계산 (더 좁은 간격으로)
        // 시작 위치를 20%로 하여 중심에서 너무 멀지 않게 설정
        const distanceFactor = 0.2 + (i * 0.1); // 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8
        const distance = secondMaxLength * distanceFactor;
        
        // 위치 계산 및 설정
        const secondRadians = secondAngle * (Math.PI / 180);
        const sx = distance * Math.cos(secondRadians);
        const sy = distance * Math.sin(secondRadians);
        
        secondSpan.style.left = sx + 'px';
        secondSpan.style.top = sy + 'px';
        secondHand.appendChild(secondSpan);
      }
      
      // 1초마다 업데이트
      setTimeout(updateClock, 1000);
    }
    
    // 시계 시작
    updateClock();
  </script>
</body>
</html>

[/code]

6개월 전

와.. 대단하시네요.

코딩을 직접하신건가요? 뭔가 대기화면상에 띄워 놓으면 좋을 듯..

4개월 전

ㅎㅎ

게시글 목록

번호 제목
192491
192489
192482
192479
192470
192464
192461
192446
192443
192425
192413
192410
192409
192388
192383
192376
192375
192369
192368
192365
192357
192353
192352
192338
192337
192314
192313
192312
192303
192301