코딩을 배우면서 제일 먼저 만드는 프로그램이, 로또번호 만들기, 그리고 계산기인 것 같다. 

 

아래의 계산기는 정말 짧은 소스로 구현을 할 수 있었다. 

 

일반적으로 계산기를 구현하려면, 계산기의 버튼 하나하나에 이벤트를 걸고 거기서 얻은 값을 연산하는 방법인데,

소개할 소스는 아래와 같다. 정말 짧지 않은가?

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

 

구현한 계산기는 ↓

bryancalc.netlify.app/

문과적으로 설명하겠다.

 

일단 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만회... ㅎㅎ
그래 행복은 성적순이 아닌거다. ㅎ

 

 

 

명품 HTML5 + CSS3 + Javascript 웹 프로그래밍

COUPANG

www.coupang.com

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받을 수 있습니다.

+ Recent posts