코딩을 배우면서 제일 먼저 만드는 프로그램이, 로또번호 만들기, 그리고 계산기인 것 같다.
아래의 계산기는 정말 짧은 소스로 구현을 할 수 있었다.
일반적으로 계산기를 구현하려면, 계산기의 버튼 하나하나에 이벤트를 걸고 거기서 얻은 값을 연산하는 방법인데,
소개할 소스는 아래와 같다. 정말 짧지 않은가?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
window.addEventListener("load",function(){
var section=document.querySelector(".main");
var numberPad=section.querySelector(".number-pad");
var disPlay=section.querySelector(".display");
numberPad.onclick=function(e){
console.log(e.target.id);
var key = e.target.id;
if (key == "equal") {
console.log(disPlay.value);
disPlay.value=eval(disPlay.value)} else
if (key == "clear") {
disPlay.value="";} else{
disPlay.value+=key;}
}
})
|
cs |
구현한 계산기는 ↓
문과적으로 설명하겠다.
일단 HTML에서 계산기의 형태를 꾸며주자.
input 입력창과 16개 셀의 테이블로 이뤄져 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<section class="main">
<input type="text" class="display" value="" disabled>
<table class="number-pad">
<tr >
<td id="1">1</td>
<td id="2">2</td>
<td id="3">3</td>
<td id="-">-</td>
</tr>
<tr>
<td id="4">4</td>
<td id="5">5</td>
<td id="6">6</td>
<td id="*">*</td>
</tr>
<tr>
<td id="7">7</td>
<td id="8">8</td>
<td id="9">9</td>
<td id="/">/</td>
</tr>
<tr>
<td id="clear">C</td>
<td id="0">0</td>
<td id="equal">=</td>
<td id="+">+</td>
</tr>
</table>
</section>
|
cs |
CSS는 개인취향대로 꾸며주자. 여기서 그게 중요한건 아니니까.
코드를 설명하자면,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
window.addEventListener("load",function(){
var section=document.querySelector(".main");
var numberPad=section.querySelector(".number-pad");
var disPlay=section.querySelector(".display");
numberPad.onclick=function(e){
console.log(e.target.id);
var key = e.target.id;
if (key == "equal") {
console.log(disPlay.value);
disPlay.value=eval(disPlay.value)} else
if (key == "clear") {
disPlay.value="";} else{
disPlay.value+=key;}
}
})
|
cs |
#1:소스가 loading이 완료된 이후에 스크립트를 실행. 여기서는 별 의미 없음
#2:html에 main클래스(계산기 전체)를 변수에 넣음
#3:html에 number-pad클래스(숫자패드)를 변수에 넣음
#4:html에 display클래스(숫자를 보여주는 input창)를 변수에 넣음
#6:숫자패드의 어딘가가 클릭되면 이하의 함수를 실행
#7:e.target.id를 중간확인하려고 넣었음. target은 클릭된 개체를 말한다.
그래서 target.id라고 하면 클릭된 위치의 id를 알 수 있다.
html의 각 숫자에 id를 부여했었다.
#8: 클릭된 위치의 id를 key변수에 할당.
5의 셀을 클릭하면 그 위치의 id인 '5'가 key에 들어간다.
#9: key가 'equal'('='셀)이면 이하의 코드를 실행한다.
#11: input창에 입력된 내용을 계산해서 disPlay.value에 넣어준다.
여기서 eval이란 함수가 input창에 텍스트 형식의 숫자와 연산자들을 그대로 계산해줘버린다. 와우!!
#12,13: 'clear'('C'셀)이 클릭됬으면 input창의 값을 빈칸으로 만든다.
#14: 위 두 경우가 아니라면, 클릭된 셀의 id들(숫자,연산자)를 그대로 input창에 계속 붙여준다.
각 숫자에 일일이 이벤트를 붙이지 않고 짧게 가능한 이유가, 숫자 전체에 하나의 이벤트를 걸어놨는데, 그 아래의 셀에서 클릭된 셀의 id를 반환받을 수 있는 덕분이다. e.target.id
이걸 '버블링'이라고 하는데, 아래 강좌영상에서 배웠다.
마치기 전에,
위 링크와 같은 훌륭한 강좌 동영상이 1년반이 넘도록 조회수가 1,400회 조금 넘었을 뿐이다. 이 강좌의 배경지식 수준, 강좌를 준비한 수고를 생각하면 너무 아깝다.
그런데, 일례로, 배틀그라운드 기초소개 동영상 조회수는 85만회... ㅎㅎ
그래 행복은 성적순이 아닌거다. ㅎ
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받을 수 있습니다.
'문과생의 coding' 카테고리의 다른 글
Javascript 캔버스에서 튕기는 공들 (w/o 중력) (0) | 2021.02.07 |
---|---|
Javascript 캔버스에서 튕기는 공 w 중력 (0) | 2021.01.10 |
Javascript 캔버스에서 움직이는 공 그리기 (0) | 2020.12.26 |
[App만들기] 회사 사전 거의 최종 버젼 (0) | 2020.04.26 |
[App 만들기] 첫번째 코딩 결과물 (0) | 2020.04.26 |