Calculator App
About this app
A simple calculator app
Calculator App AC ÷ 7 8 9 × 4 5 6 - 1 2 3 + 0 . =
Related apps
Put this on your site
Source
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Calculator App</title>
<meta name="description" content="A simple calculator app">
<meta name="keywords" content="calculator, math, arithmetic">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
<script type="text/javascript">
try {
// App Javascript Goes Here. Place your entire script content inside the try block for error handling.
// This will run when the DOM is ready.
document.addEventListener("DOMContentLoaded", function() {
// Calculator App
const calculator = {
displayValue: '0',
firstOperand: null,
waitingForSecondOperand: false,
operator: null,
};
function updateDisplay() {
const display = document.querySelector('.calculator-screen');
display.value = calculator.displayValue;
}
updateDisplay();
function inputDigit(digit) {
const { displayValue, waitingForSecondOperand } = calculator;
if (waitingForSecondOperand === true) {
calculator.displayValue = digit;
calculator.waitingForSecondOperand = false;
} else {
calculator.displayValue = displayValue === '0' ? digit : displayValue + digit;
}
}
function inputDecimal(dot) {
if (calculator.waitingForSecondOperand === true) {
calculator.displayValue = '0.'
calculator.waitingForSecondOperand = false;
return;
}
if (!calculator.displayValue.includes(dot)) {
calculator.displayValue += dot;
}
}
function handleOperator(nextOperator) {
const { firstOperand, displayValue, operator } = calculator;
const inputValue = parseFloat(displayValue);
if (operator && calculator.waitingForSecondOperand) {
calculator.operator = nextOperator;
return;
}
if (firstOperand === null) {
calculator.firstOperand = inputValue;
} else if (operator) {
const result = performCalculation[operator](firstOperand, inputValue);
calculator.displayValue = String(result);
calculator.firstOperand = result;
}
calculator.waitingForSecondOperand = true;
calculator.operator = nextOperator;
}
const performCalculation = {
'/': (firstOperand, secondOperand) => firstOperand / secondOperand,
'*': (firstOperand, secondOperand) => firstOperand * secondOperand,
'+': (firstOperand, secondOperand) => firstOperand + secondOperand,
'-': (firstOperand, secondOperand) => firstOperand - secondOperand,
'=': (firstOperand, secondOperand) => secondOperand
};
function resetCalculator() {
calculator.displayValue = '0';
calculator.firstOperand = null;
calculator.waitingForSecondOperand = false;
calculator.operator = null;
}
const keys = document.querySelector('.calculator-keys');
keys.addEventListener('click', (event) => {
const { target } = event;
if (!target.matches('button')) {
return;
}
if (target.classList.contains('operator')) {
handleOperator(target.value);
updateDisplay();
return;
}
if (target.classList.contains('decimal')) {
inputDecimal(target.value);
updateDisplay();
return;
}
if (target.classList.contains('all-clear')) {
resetCalculator();
updateDisplay();
return;
}
inputDigit(target.value);
updateDisplay();
});
});
} catch (error) {
// This will throw the error to the parent window.
throw error;
}
</script>
<style>
/* App CSS Goes Here */
body {
background-color: #f8f9fa;
font-family: 'Roboto', sans-serif;
}
.container {
max-width: 400px;
margin: 0 auto;
padding-top: 50px;
}
.calculator {
background-color: #fff;
border-radius: 10px;
box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.calculator-screen {
width: 100%;
font-size: 2rem;
padding: 1.5rem;
background-color: #f5f8fa;
border: none;
color: #212529;
text-align: right;
}
.calculator-key {
position: relative;
width: 25%;
padding: 0;
border: none;
text-align: center;
cursor: pointer;
outline: none;
font-size: 1.5rem;
transition: background-color 0.3s ease;
}
.calculator-key:hover {
background-color: #e9ecef;
}
.calculator-key:active {
background-color: #dee2e6;
}
.calculator-key.operator {
background-color: #fff;
text-align: center;
}
.calculator-key.all-clear {
background-color: #e9ecef;
}
.calculator-key.decimal {
background-color: #fff;
}
.calculator-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-gap: 1px;
}
.calculator-key span {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.calculator-key i {
font-size: 1rem;
}
</style>
</head>
<body>
<div id="main-container" class="container">
<!-- App HTML Goes Here -->
<div class="calculator">
<input type="text" class="calculator-screen" value="" disabled />
<div class="calculator-grid">
<button class="calculator-key all-clear" value="all-clear">AC</button>
<button class="calculator-key" value="/">÷</button>
<button class="calculator-key" value="7">7</button>
<button class="calculator-key" value="8">8</button>
<button class="calculator-key" value="9">9</button>
<button class="calculator-key" value="*">×</button>
<button class="calculator-key" value="4">4</button>
<button class="calculator-key" value="5">5</button>
<button class="calculator-key" value="6">6</button>
<button class="calculator-key" value="-">-</button>
<button class="calculator-key" value="1">1</button>
<button class="calculator-key" value="2">2</button>
<button class="calculator-key" value="3">3</button>
<button class="calculator-key" value="+">+</button>
<button class="calculator-key" value="0">0</button>
<button class="calculator-key decimal" value=".">.</button>
<button class="calculator-key" value="=">=</button>
</div>
</div>
</div>
</body>
</html>
NEW APPS
These are apps made by the community!