js实现mac计算器,计算到第三个数时自动变成前两个数的计算之和
时间: 2023-06-27 20:04:30 浏览: 57
以下是一个简单的实现,通过监听数字和运算符按钮的点击事件,以及等号按钮的点击事件,实现基本的计算器功能:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript Calculator</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f1f1f1;
}
#calculator {
margin: 50px auto;
width: 300px;
background-color: #fff;
border-radius: 10px;
box-shadow: 0px 0px 20px rgba(0,0,0,0.2);
padding: 20px;
}
input {
font-size: 24px;
width: 100%;
margin-bottom: 10px;
padding: 10px;
box-sizing: border-box;
border-radius: 5px;
border: none;
background-color: #f9f9f9;
text-align: right;
}
button {
font-size: 24px;
width: 25%;
padding: 10px;
box-sizing: border-box;
border-radius: 5px;
border: none;
background-color: #e0e0e0;
cursor: pointer;
}
button:hover {
background-color: #d0d0d0;
}
button:active {
background-color: #c0c0c0;
}
.operator {
background-color: #f0a0a0;
}
.operator:hover {
background-color: #e08080;
}
.operator:active {
background-color: #d06060;
}
</style>
</head>
<body>
<div id="calculator">
<input type="text" id="display" readonly>
<button onclick="addNumber(7)">7</button>
<button onclick="addNumber(8)">8</button>
<button onclick="addNumber(9)">9</button>
<button class="operator" onclick="setOperator('+')">+</button>
<button onclick="addNumber(4)">4</button>
<button onclick="addNumber(5)">5</button>
<button onclick="addNumber(6)">6</button>
<button class="operator" onclick="setOperator('-')">-</button>
<button onclick="addNumber(1)">1</button>
<button onclick="addNumber(2)">2</button>
<button onclick="addNumber(3)">3</button>
<button class="operator" onclick="setOperator('*')">*</button>
<button onclick="addNumber(0)">0</button>
<button onclick="addDecimal()">.</button>
<button class="operator" onclick="setOperator('/')">/</button>
<button onclick="calculate()">=</button>
</div>
<script>
let currentNumber = '';
let firstNumber = '';
let operator = '';
const display = document.getElementById('display');
function addNumber(num) {
currentNumber += num;
display.value = currentNumber;
}
function addDecimal() {
if (!currentNumber.includes('.')) {
currentNumber += '.';
display.value = currentNumber;
}
}
function setOperator(op) {
if (firstNumber === '') {
firstNumber = currentNumber;
} else {
calculate();
}
operator = op;
currentNumber = '';
}
function calculate() {
let result;
if (operator === '+') {
result = parseFloat(firstNumber) + parseFloat(currentNumber);
} else if (operator === '-') {
result = parseFloat(firstNumber) - parseFloat(currentNumber);
} else if (operator === '*') {
result = parseFloat(firstNumber) * parseFloat(currentNumber);
} else if (operator === '/') {
result = parseFloat(firstNumber) / parseFloat(currentNumber);
}
if (currentNumber !== '') {
firstNumber = currentNumber;
}
currentNumber = '';
display.value = result;
}
// 自动计算到第三个数
function autoCalculate() {
if (operator !== '' && currentNumber !== '') {
let result;
if (operator === '+') {
result = parseFloat(firstNumber) + parseFloat(currentNumber);
} else if (operator === '-') {
result = parseFloat(firstNumber) - parseFloat(currentNumber);
} else if (operator === '*') {
result = parseFloat(firstNumber) * parseFloat(currentNumber);
} else if (operator === '/') {
result = parseFloat(firstNumber) / parseFloat(currentNumber);
}
firstNumber = currentNumber;
currentNumber = result.toString();
display.value = currentNumber;
}
}
// 监听数字和运算符按钮的点击事件
const buttons = document.querySelectorAll('button');
buttons.forEach(button => {
button.addEventListener('click', () => {
if (button.innerText === '=') {
calculate();
} else if (button.classList.contains('operator')) {
setOperator(button.innerText);
} else {
addNumber(button.innerText);
autoCalculate();
}
});
});
// 监听键盘事件
document.addEventListener('keydown', event => {
if (event.key === '0') {
addNumber(0);
autoCalculate();
} else if (event.key === '1') {
addNumber(1);
autoCalculate();
} else if (event.key === '2') {
addNumber(2);
autoCalculate();
} else if (event.key === '3') {
addNumber(3);
autoCalculate();
} else if (event.key === '4') {
addNumber(4);
autoCalculate();
} else if (event.key === '5') {
addNumber(5);
autoCalculate();
} else if (event.key === '6') {
addNumber(6);
autoCalculate();
} else if (event.key === '7') {
addNumber(7);
autoCalculate();
} else if (event.key === '8') {
addNumber(8);
autoCalculate();
} else if (event.key === '9') {
addNumber(9);
autoCalculate();
} else if (event.key === '.') {
addDecimal();
} else if (event.key === '+') {
setOperator('+');
} else if (event.key === '-') {
setOperator('-');
} else if (event.key === '*') {
setOperator('*');
} else if (event.key === '/') {
setOperator('/');
} else if (event.key === '=') {
calculate();
}
});
</script>
</body>
</html>
```
在 `autoCalculate` 函数中,如果当前已经输入了两个数字和一个运算符,则自动计算前两个数字的结果,并将结果作为当前数字,清空运算符和第一个数字。在按钮和键盘事件中都调用了这个函数,实现了自动计算的功能。