<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" />
<title>Calculator</title>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Electrolize&display=swap" rel="stylesheet" />
</head>
<body>
<section class="calculator">
<div class="calculator__result">
<input readonly id="operator" />
<input readonly type="number" id="result" />
</div>
<div class="row">
<button id="num-7">7</button>
<button id="num-8">8</button>
<button id="num-9">9</button>
<button id="plus" class="operator">+</button>
</div>
<div class="row">
<button id="num-4">4</button>
<button id="num-5">5</button>
<button id="num-6">6</button>
<button id="minus" class="operator">-</button>
</div>
<div class="row">
<button id="num-1">1</button>
<button id="num-2">2</button>
<button id="num-3">3</button>
<button id="divide" class="operator">/</button>
</div>
<div class="row">
<button id="clear">C</button>
<button id="num-0">0</button>
<button id="calculate">=</button>
<button id="multiply" class="operator">x</button>
</div>
</section></script>
</body>
</html>
* {
box-sizing: border-box;
margin: 0;
}
body {
width: 100%;
height: 100vh;
display: flex;
justify-content: center;
align-items: center;
font-family: 'Electrolize', sans-serif;
}
button,
input {
font-family: 'Electrolize', sans-serif;
text-align: center;
}
button:active,
button:focus,
input:active,
input:focus {
outline: none;
}
.calculator {
border: 1px solid #000;
padding: 20px;
background-color: #9474cc;
border-radius: 20px;
border: none;
box-shadow: 5px 5px 0 #64489b;
}
.calculator__result {
margin-bottom: 20px;
}
#operator,
#result {
height: 50px;
margin: 5px;
box-shadow: 3px 3px 0 #64489b;
border-radius: 5px;
border: none;
font-size: 30px;
}
#result {
width: 180px;
text-align: right;
}
#operator {
width: 50px;
}
button {
width: 50px;
height: 50px;
margin: 5px;
font-size: 20px;
font-weight: 700;
background-color: #fff;
border: none;
border-radius: 5px;
box-shadow: 3px 3px 0 #64489b;
}
button:hover {
background-color: #d1c4e9;
cursor: pointer;
}
button:active {
position: relative;
top: 2px;
color: #fff;
box-shadow: 1px 1px 0 #64489b;
}
.operator {
background-color: #c6a3ff;
}
.operator:hover {
background-color: #b39ddb;
}
#clear,
#calculate {
background-color: #b39ddb;
}
#clear:hover,
#calculate:hover {
background-color: #836fa9;
}
let numOne = '';
let operator = '';
let numTwo = '';
const $operator = document.querySelector('#operator');
const $result = document.querySelector('#result');
const onClickNumber = (event) => {
if (!operator) {
numOne += event.target.textContent;
$result.value += event.target.textContent;
return;
}
if (!numOne && !numTwo && $operator.value === '-') {
numOne += event.target.textContent * -1;
$result.value += event.target.textContent * -1;
operator = '';
$operator.value = '';
return;
}
if (!numTwo) {
$result.value = '';
}
numTwo += event.target.textContent;
$result.value += event.target.textContent;
};
const onClickOperator = (op) => () => {
if (numTwo) {
switch (operator) {
case '+':
$result.value = parseInt(numOne) + parseInt(numTwo);
break;
case '-':
$result.value = numOne - numTwo;
break;
case '*':
$result.value = numOne * numTwo;
break;
case '/':
$result.value = numOne / numTwo;
break;
default:
break;
}
$operator.value = '';
numOne = $result.value;
operator = '';
numTwo = '';
}
if (numOne || (!numOne && op === '-')) {
operator += op;
$operator.value = op;
} else {
alert('숫자를 먼저 입력하세요.');
}
};
document.querySelector('#num-0').addEventListener('click', onClickNumber);
document.querySelector('#num-1').addEventListener('click', onClickNumber);
document.querySelector('#num-2').addEventListener('click', onClickNumber);
document.querySelector('#num-3').addEventListener('click', onClickNumber);
document.querySelector('#num-4').addEventListener('click', onClickNumber);
document.querySelector('#num-5').addEventListener('click', onClickNumber);
document.querySelector('#num-6').addEventListener('click', onClickNumber);
document.querySelector('#num-7').addEventListener('click', onClickNumber);
document.querySelector('#num-8').addEventListener('click', onClickNumber);
document.querySelector('#num-9').addEventListener('click', onClickNumber);
document.querySelector('#plus').addEventListener('click', onClickOperator('+'));
document.querySelector('#minus').addEventListener('click', onClickOperator('-'));
document.querySelector('#divide').addEventListener('click', onClickOperator('/'));
document.querySelector('#clear').addEventListener('click', () => {
numOne = '';
operator = '';
numTwo = '';
$result.value = '';
$operator.value = '';
});
document.querySelector('#calculate').addEventListener('click', () => {
if (numTwo) {
switch (operator) {
case '+':
$result.value = parseInt(numOne) + parseInt(numTwo);
break;
case '-':
$result.value = numOne - numTwo;
break;
case '*':
$result.value = numOne * numTwo;
break;
case '/':
$result.value = numOne / numTwo;
break;
default:
break;
}
$operator.value = '';
numOne = $result.value;
operator = '';
numTwo = '';
} else {
alert('숫자를 먼저 입력하세요.');
}
});
document.querySelector('#multiply').addEventListener('click', onClickOperator('*'));
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.