javascript

자바 스크립트를 이용한 한글 시계

ballboy 2019. 3. 23. 16:06

KoreanClock.zip


자바 스크립트를 이용한 한글 시계


어디선가 봤던 한글 시계를 자바 스크립트로 작성해봤습니다.
제이쿼리를 쓰지 않았고 자바스크립트를 이제 막 접했을 때 작성한 프로그램이라서 부족한 부분이 많이 있습니다.


미리보기

Result 모바일에서는 실행이 안 될수 있습니다.


HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>KoreanClock -Ballboy-</title>
<link rel="stylesheet" type="text/css" href="css/time.css">
<script type="text/javascript" src="js/time.js"></script>
</head>
<body>
    <div id="main">
        <div id="time-box" ></div>
    </div>
</body>
</html>
  • html에서는 단순히 시계를 보여주기 위한 기능 외에는 큰 기능이 없습니다.

Java Script

  • Java Script는 5개의 함수와 하나의 배열로 작성이 되어 있습니다.
    • kors : 시간을 나타낼 한글문자 64개를 배열로 저장하는 변수
    • dlf : 날짜(일)을 한글로 변환해주는 함수,
      정수로 받은 파라미터를 단순히 10의 자리와 1의 자리로 나누어 각각에 값에 한글을 매치하는 방식으로 숫자를 한글로 변환합니다.
    • tl : 시간(시)를 한글로 변환해주는 함수, 작동원리는 dlf함수와 같습니다.
    • qns_ch : 분과 초를 한글로 변환해주는 함수, 작동원리는 dlf, tl함수와 같습니다
    • time : new Date()를 이용하여 현재의 날짜와 시간정보를 각각의 dlf, tl, qns_ch함수에 전달후 모든 정보를 취합하는 함수
      각각의 함수에서 얻어진 한글 정보는 kors배열과 내용 및 순서를 비교하여 글의 색을 바꾸어 출력합니다.
    • window.onload : 프로그램을 최초로 실행 시키며 시간 데이터를 setInerval 함수를 사용하여 1초마다 업데이트 다시 출력을 합니다.
var kors = [
	'이', '삼', '십', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구', '일',
	'오', '전', '후', '굿', '열', '한', '두', '세', '네', '다', '볼', '여', '섯', '일', '곱', '덟', '아', '홉', '시',
	'이', '삼', '사', '오', '십', '일', '이', '보', '삼', '사', '오', '육', '칠', '팔', '구', '분',
	'이', '삼', '사', '오', '십', '일', '이', '이', '삼', '사', '오', '육', '칠', '팔', '구', '초'
]

var dlf = function(d){
	var kor = "";
	if(d.ten != 0){
		switch(d.ten){
		case(2):
			kor = "이";
			break;
		case(3):
			kor = "삼";
			break;
		}
		kor += "십";
	}

	switch(d.one){
	case(1):
		kor += "일";
		break;
	case(2):
		kor += "이";
		break;
	case(3):
		kor += "삼";
		break;
	case(4):
		kor += "사";
		break;
	case(5):
		kor += "오";
		break;
	case(6):
		kor += "육";
		break;
	case(7):
		kor += "칠";
		break;
	case(8):
		kor += "팔";
		break;
	case(9):
		kor += "구";
		break;
	}
	kor += "일";
	return kor;
}

var tl = function(h){
	var kor = "오";
	if(h.o >= 12)
		kor += "후";
	else
		kor += "전";

	if(h.ten != 0)
		kor += "열";
	switch(h.one){
	case(1):
		kor += "한";
		break;
	case(2):
		kor += "두";
		break;
	case(3):
		kor += "세";
		break;
	case(4):
		kor += "네";
		break;
	case(5):
	case(6):
		if(h.one == 5)
			kor += "다섯";
		else
			kor += "여섯";
		break;
	case(7):
		kor += "일곱";
		break;
	case(8):
		kor += "여덟";
		break;
	case(9):
		kor += "아홉";
		break;
	}
	kor += "시";
	return kor;
}

var qns_ch = function(qc){
	var kor = "";

	if(qc.ten != 0){
		switch(qc.ten){
		case(2):
			kor += "이"; break;
		case(3):
			kor += "삼"; break;
		case(4):
			kor += "사"; break;
		case(5):
			kor += "오"; break;
		}
		kor += "십";
	}

	switch(qc.one){
	case(1):
		kor += "일"; break;
	case(2):
		kor += "이"; break;
	case(3):
		kor += "삼"; break;
	case(4):
		kor += "사"; break;
	case(5):
		kor += "오"; break;
	case(6):
		kor += "육"; break;
	case(7):
		kor += "칠"; break;
	case(8):
		kor += "팔"; break;
	case(9):
		kor += "구"; break;
	}

	if(qc.name == "m")
		kor += "분";
	else
		kor += "초";
	return kor;
}

var time = function(){
	var timeKor="";
	var t = new Date();
	var d = {};
	d.o = t.getDate();
	d.ten = Math.floor(d.o / 10);
	d.one = d.o % 10;
	var h = {}
	h.o = t.getHours();
	h.ten = Math.floor((h.o-12) / 10);
	h.one = (h.o-12) % 10;
	var m = {};
	m.o = t.getMinutes();
	m.name = "m";
	m.ten = Math.floor(m.o / 10);
	m.one = m.o % 10;
	var s = {};
	s.o = t.getSeconds();
	s.name = "s";
	s.ten = Math.floor(s.o / 10);
	s.one = s.o % 10;

	timeKor = timeKor + dlf(d) + tl(h) + qns_ch(m) + qns_ch(s);

	var timeBox = document.getElementById("time-box");
	var k = 0;
	var kor = "";

	for(var i = 0; i < 8; i++){
		for(var j = 0; j < 8; j++){
			if(timeKor[k] == kors[(i*8)+j]){
				kor = kor + "<span>" + kors[(i*8)+j] + "</span>";
				k++;
			} else {
				kor = kor + kors[(i*8)+j];
			}
		}
		if(i != 8){
			kor = kor + "<br>";
		}
	}
	timeBox.innerHTML = kor;
	kor = "";
}

window.onload = function(){
	//time();
	setInterval("time()", 1000);
};

css

@charset "UTF-8";
* {
	margin: 0;
	padding: 0;
	background-color:#3c3c3c;
}

# now {
	position:absolute;
	left:110px;
	top:15px;
	background-color:#3c3c3c;
	width:180px;
	height:40px;
	padding-top:2px;
	color:#FF0;
	font-size:25px;
	text-align:center;
	opacity:0.8;
}

# made {
	position:absolute;
	left:110px;
	top:374px;
	background-color:#3c3c3c;
	width:180px;
	height:32px;
	padding-top:2px;
	color:#FF0;
	font-size:20px;
	text-align:center;
	opacity:0.8;
}

# time-box {
	//position:absolute;
	//left:50px;
	//top:70px;
	//background-color:#3c3c3c;
	width:300px;
	height:285px;
	padding-top:15px;
	color:#AAA;
	text-align:center;
	font-size:25px;
	letter-spacing:8px;
	opacity:0.8;
}

# main {

	position:absolute;
	top:50%;
	left:50%;
	transform: translateX(-50%) translateY(-50%);
}

span {
	color:#FF0;
	opacity:1;
}