반응형
로또 추첨 프로그램을 만들어보자
이전에 이미 로또 추첨 프로그램을 만든적이 있지만, 네...(말잇못(;´д`)ゞ)
https://yoonhihi.tistory.com/148?category=972019
처음에 만들 때 든 생각이 점점 더 멋있게 만들어보자! 였는데, 아직도 부족하지만 업그레이드된 버전으로
작성해보려한다. (ノ◕ヮ◕)ノ*:・゚✧
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="/css/rotto.css"> //css 연결
<script src="/js/rotto.js"></script> //js 연결
<title>로또 추첨기</title>
</head>
<body>
<header>
<h2 class="title">로또 추첨기</h2>
</header>
<div class="content">
<div class="rottoNum_wrap"> // 로또공(?)이 들어갈 영역
<div class="ball" id="num1"><span>?</span></div>
//동일하게 동그란 모양을 만들기 위해 class로 ball 주기
<div class="ball" id="num2"><span>?</span></div>
<div class="ball" id="num3"><span>?</span></div>
<div class="ball" id="num4"><span>?</span></div>
<div class="ball" id="num5"><span>?</span></div>
<div class="ball" id="num6"><span>?</span></div>
<div class="plus">+</div>
<div class="ball bonus" id="num7"><span>?</span></div>
//보너스번호는 공의 색깔을 다르게 주기위해 bonus로 클래스명 주기
<div class="btn_wrap"> // 버튼영역
<input class ="btn" type="button" value="추첨하기" onclick="getNum()">
// 클릭된다면 getNum() 함수가 실행되게 하기
</div>
</div>
</div>
</html>
CSS
/*웹폰트*/
@font-face {
font-family: 'IM_Hyemin-Bold';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2106@1.1/IM_Hyemin-Bold.woff2') format('woff');
font-weight: normal;
font-style: normal;
}
@font-face {
font-family: 'IM_Hyemin-Regular';
src: url('https://cdn.jsdelivr.net/gh/projectnoonnu/noonfonts_2106@1.1/IM_Hyemin-Regular.woff2') format('woff');
font-weight: normal;
font-style: normal;
}
body{
width: 100%;
background-color: #eb9f9f;
position: relative;
}
.title{
font-family: 'IM_Hyemin-Bold';
font-size: 50px;
text-align: center; /*중앙에 위치하도록*/
color: #fff;
}
.rottoNum_wrap{
width: 1000px;
height: 550px;
background: url(/images/gui-2311258_1280.png) no-repeat;
/*백그라운드 이미지 넣기, no-repeat : 반복 x */
background-size: 100%;
margin: 0 auto;
text-align: center; /*글자 중앙정렬*/
position: relative; /*plus(+) 위치 조정을 위해 relative설정*/
}
.ball{
border-radius: 100%; /*원형으로 만들기*/
background-color: #f1bbba;
width: 100px;
height: 100px;
display: inline-block; /*일자로 정렬하기 위해 적용*/
margin: 150px 10px 150px;
position: relative;
}
.ball span{ /*공안의 숫자 텍스트 부분 스타일적용*/
display: block;
font-family: 'IM_Hyemin-Regular';
font-size: 40px;
text-align: center;
margin-top: 25px;
}
.bonus{ /*보너스공 스타일 적용*/
margin-left: 50px;
background-color: #aed8ff;
}
.rottoNum_wrap .plus{ /*플러스 텍스트 스타일 적용*/
position: absolute;
display: inline-block;
font-family: 'IM_Hyemin-Regular';
font-size: 50px;
height: 100px;
top: 160px;
}
.btn_wrap{
width: 100%;
margin: 0 auto;
}
.btn{ /*버튼 스타일 적용*/
border: none;
background-color: #a79c8e;
color: white;
font-family: 'IM_Hyemin-Regular';
font-size: 20px;
width: 150px;
height: 40px;
border-radius: 10px; /*모서리 둥글게*/
}
.btn:hover{ /*버튼 위에 마우스 올라갔을 때 스타일적용*/
background-color: #8a8277;
transition-duration:2s;
}
JS
function getNum(){
let ball = document.getElementsByClassName("ball"); //class이름이 ball인 요소 가져오기
//추첨 후에, 또 추첨하기 버튼을 누르면 이전에 들어간 번호가 남아있어
//초기화 해주기 위한 부분
for(let i = 0; i < ball.length ; i++){
ball[i].innerHTML = '<span>?</span>'; //for문 돌리며 ball 안의 텍스트 ?로 넣기
}
let rottoNum = []; //추첨한 로또 번호를 담을 배열
for(let i = 0; i < 7 ; i++){
rottoNum[i] = Math.floor(Math.random()*45)+1; //랜덤함수를 통해 랜덤으로 번호생성
//추첨된 번호가 중복됐을 시, 재추첨하기
for(let j = 0; j < i; j++){
if(rottoNum[i] == rottoNum[j]){
i--;
break;
}
}
}
for(let i=0; i < rottoNum.length; i++){
let ball = document.getElementById("num" + (i+1));
// setTimeout()함수를 이용하여, 1초마다 실행되도록 함
setTimeout(function(){
ball.innerHTML = `<span>${rottoNum[i]}</span`;
},i*1000);
}
}
[결과]
로또 추첨 해보고 싶으신분은 아래 링크를 클릭해주세용
로또 추첨 하러 가기 (ノ◕ヮ◕)ノ*:・゚✧
>
아직도 코드가 복잡한 느낌이 있고, 엄청난 애니메이션 효과는 없어서 아쉽지만
이전보다 나은 결과물을 만든것처럼 다음번에 더 좋은 결과물로 작성하겠습니다:)
열심히 공부하고 있지만, 오류 사항이 존재 할 수 있습니다.
수정 사항이 존재 할 경우 알려주시면 감사하겠습니다 <(__)>
반응형
'프로그래밍 > 자바스크립트' 카테고리의 다른 글
16 노드(node) (0) | 2021.07.09 |
---|---|
15 문서객체모델(DOM) (0) | 2021.07.08 |
14 주민등록번호 유효성 체크 프로그램을 만들어 보자 (1) | 2021.07.04 |
13 window 객체 (0) | 2021.07.03 |
댓글