구현할 기능
- 숫자와 연산자를 클릭하면 input 창에 나오게 하기
- '='을 클릭하면 계산하기
- 'CE"와 'C'를 클릭하면 전체 지우기
- 'BACK'을 클릭하면 끝에서 마지막 한 글자만 지우기
HTML
처음 계획은 각 연산자마다 함수를 만들어서 기능을 구현하는 것이었습니다. 따라서 연산자마다 다른 class를 지정했었는데 다시 생각해보니 eval() 함수를 사용하면 생각보다 쉽게 만들 수 있을 것 같아 숫자와 연산자에 동일한 'input' class를
적용해주고 한 번에 불러올 수 있도록 만들었습니다.
<div class="container">
<input type="text" class="inputBox" placeholder="0">
<div>
<button class="removeLast">BACK</button>
<button class="clear">CE</button>
<button class="clear">C</button>
<button class="calculate">=</button>
</div>
<div>
<button class="input">7</button>
<button class="input">8</button>
<button class="input">9</button>
<button class="input">/</button>
</div>
<div>
<button class="input">4</button>
<button class="input">5</button>
<button class="input">6</button>
<button class="input">*</button>
</div>
<div>
<button class="input">1</button>
<button class="input">2</button>
<button class="input">3</button>
<button class="input">-</button>
</div>
<div>
<button class="input">0</button>
<button>NONE</button>
<button>NONE</button>
<button class="input">+</button>
</div>
</div>
CSS
디자인은 '자바스크립트 계산기'라는 키워드로 검색하여 가장 심플해 보이는 것을 참고하여 간단히 만들어 보았습니다.
body {
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.container {
width: 500px;
height: 400px;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
background: #BFB8DA;
border-radius: 20px;
}
button {
width: 100px;
height: 50px;
background: #6F5F90;
border: 0;
border-radius: 5px;
color: white;
margin-bottom: 5px;
font-size: 20px;
}
input {
width: 410px;
height: 50px;
margin-bottom: 20px;
border-radius: 10px;
bordeR: 0;
background: #F5F2E3;
font-size: 20px;
}
JS
먼저 처음에 숫자, 연산자 등을 클릭하면 해당 값이 input 창에 나타나는 코드를 작성하였습니다. 클래스 명이 input인
것들을 한꺼번에 불러왔기 때문에 forEach 반복문을 사용해주었습니다.
const back = document.querySelector(".removeLast")
const clear = document.querySelector(".clear")
const calculate = document.querySelector(".calculate")
const inputs = document.querySelectorAll(".input")
const inputBox = document.querySelector(".inputBox")
//input 창에 입력하는 기능 구현
inputs.forEach((input) => {
const inputExp = () => {
inputBox.value += input.innerText;
}
input.addEventListener("click", inputExp)
})
그리고 eval() 함수를 사용하여 '='을 클릭했을 때 input 창에 있는 값을 계산하는 기능을 구현하였습니다
//계산하는 기능 구현
const result = () => {
inputBox.value = eval(inputBox.value)
}
calculate.addEventListener("click", result)
마지막으로 'CE', 'C', 'BACK' 버튼의 기능을 구현하였습니다.
// CE, C 버튼은 같은 기능으로 입력 창의 내용을 모두 지운다.(처음처럼 0 출력)
clear.addEventListener("click", function () {
inputBox.value = '';
})
//BACK 버튼을 누르면 입력창의 마지막 문자를 지운다.
back.addEventListener("click", function () {
inputBox.value = inputBox.value.substr(0, inputBox.value.length - 1)
})
디자인 참고
'새싹' 카테고리의 다른 글
[새싹 프론트엔드] Styled-Components 기초 배우기 (0) | 2022.11.28 |
---|---|
[새싹 프론트엔드] React Router (0) | 2022.11.22 |
[새싹 프론트엔드] for문과 while문은 언제 사용해야 할까? (0) | 2022.11.07 |
[새싹 프론트엔드] HTML, CSS로 회원가입 창 만들어 보기 (0) | 2022.10.30 |
[새싹 프론트엔드] 브라우저 동작 방법 (0) | 2022.10.17 |