JavaScript 计算器
在本教程中,我们将创建一个简单的JavaScript 计算器。该计算器能够对 2 个或 2 个以上的数字进行加减乘除。计算器可以成为日常生活中非常有用的应用程序。您可以使用计算器来计算您的购物账单、计算您的贷款、执行简单的数学计算等。一般来说,我们有两种类型的计算器,一种是科学计算器,另一种是简单计算器。科学计算器用于执行复杂的数学计算,如平方根、平方、立方、对数、三角函数等。而简单的计算器用于执
在本教程中,我们将创建一个简单的JavaScript 计算器。该计算器能够对 2 个或 2 个以上的数字进行加减乘除。
计算器可以成为日常生活中非常有用的应用程序。您可以使用计算器来计算您的购物账单、计算您的贷款、执行简单的数学计算等。
一般来说,我们有两种类型的计算器,一种是科学计算器,另一种是简单计算器。科学计算器用于执行复杂的数学计算,如平方根、平方、立方、对数、三角函数等。而简单的计算器用于执行简单的数学计算,如加法、减法、乘法和除法。
我们将在本文中使用 HTML、CSS 和 JavaScript 逐步创建一个简单的计算器。
简单的 JavaScript 计算器
让我们开始创建我们的简单计算器。我们将使用:
我们将逐步开始构建我们的计算器。首先,将创建计算器的结构(使用 HTML),然后我们将对其进行样式设置(使用 CSS),最后,我们将创建计算器的逻辑(使用 JavaScript)。
在继续之前,让我们看看我们将要构建什么。
创建计算器的结构 - HTML
当您在 HTML 中创建任何东西的结构时,结构不必是完美的。您首先需要创建一个基本布局,然后根据您的需要对其进行修改。
首先创建一个容器元素(带有类容器的div 元素),然后在其中创建另一个带有类计算器的 div 元素。这个 div 元素将是我们的计算器容器。
<div class="container">
<div class="calculator">
</div>
</div>
现在,在计算器容器中,创建 2 个 div 元素,一个用于显示结果,另一个用于显示输入。
<div class="calculator">
<div class="output">
</div>
<div class="input">
</div>
</div>
输出元素将进一步包含 2 个前置元素。第一个称为上输出,显示表达式,第二个称为下输出,显示结果。
<div class="output">
<pre class="upper"></pre>
<pre class="lower">0</pre>
</div>
输入元素将包含我们可以拥有的各种输入按钮,例如数字、运算符、清除、括号等。此外,使用javascript 函数将 onclick 事件附加到所有这些按钮。
<div class="input">
<button onclick="pressAllClear()">AC</button>
<button onclick="pressNum(this)">0</button>
<button onclick="pressClear()"><i class="fas fa-backspace"></i></button>
<button onclick="pressOperator(this)">+</button>
<button onclick="pressNum(this)">1</button>
<button onclick="pressNum(this)">2</button>
<button onclick="pressNum(this)">3</button>
<button onclick="pressOperator(this)">-</button>
<button onclick="pressNum(this)">4</button>
<button onclick="pressNum(this)">5</button>
<button onclick="pressNum(this)">6</button>
<button onclick="pressOperator(this)">×</button>
<button onclick="pressNum(this)">7</button>
<button onclick="pressNum(this)">8</button>
<button onclick="pressNum(this)">9</button>
<button onclick="pressOperator(this)">÷</button>
<button onclick="pressDot()">.</button>
<button onclick="pressBracket(this)">(</button>
<button onclick="pressBracket(this)">)</button>
<button onclick="pressEqual()">=</button>
</div>
在上面的代码中,您可以看到按钮按特定顺序排列,因为我们希望我们的按钮位于特定位置。通过不同的顺序,我们可以创建不同的计算器布局。
最后,将 CSS 和 Javascript 文件连接到 HTML 文件。此外,将字体很棒的图标添加到 HTML 文件中。
这是计算器的完整 HTML 代码。将其保存为index.html文件。
完整的 HTML 代码
<!DOCTYPE html>
<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">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<link rel="stylesheet" href="./style.css">
<title>Javascript Calculator</title>
</head>
<body>
<div class="container">
<div class="calculator">
<div class="output">
<pre id="upper"></pre>
<pre id="lower">0</pre>
</div>
<div class="input">
<button onclick="pressAllClear()">AC</button>
<button onclick="pressNum(this)">0</button>
<button onclick="pressClear()"><i class="fas fa-backspace"></i></button>
<button onclick="pressOperator(this)">+</button>
<button onclick="pressNum(this)">1</button>
<button onclick="pressNum(this)">2</button>
<button onclick="pressNum(this)">3</button>
<button onclick="pressOperator(this)">-</button>
<button onclick="pressNum(this)">4</button>
<button onclick="pressNum(this)">5</button>
<button onclick="pressNum(this)">6</button>
<button onclick="pressOperator(this)">×</button>
<button onclick="pressNum(this)">7</button>
<button onclick="pressNum(this)">8</button>
<button onclick="pressNum(this)">9</button>
<button onclick="pressOperator(this)">÷</button>
<button onclick="pressDot()">.</button>
<button onclick="pressBracket(this)">(</button>
<button onclick="pressBracket(this)">)</button>
<button onclick="pressEqual()">=</button>
</div>
</div>
</div>
<script src="./script.js"></script>
</body>
</html>
这是它的外观:
样式化计算器 - CSS
要设置计算器的样式,您需要创建 CSS 文件。在 CSS 文件中,使用CSS 选择器定位元素并向它们添加样式:
对于按钮方向,您可以使用flexbox。
这是计算器的完整 CSS 代码。将其保存为style.css文件。
完整的 CSS 代码
/* Calculator CSS */
@import url('https://fonts.googleapis.com/css2?family=Orbitron&display=swap');
body {
margin: 0;
box-sizing: border-box;
}
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #4e4e4e;
}
.calculator {
background: #dd6f6f;
border-radius: 5px;
padding: 5px;
width: 300px;
min-width: 300px;
box-shadow: inset 2px 2px 5px rgba(255, 255, 255, 0.4),
4px 4px 10px rgba(0, 0, 0, 0.7);
}
.output {
display: flex;
flex-direction: column;
align-items: flex-end;
position: relative;
background: #ffffff;
min-height: 50px;
padding: 5px;
margin: 0 1px 10px;
border-radius: 0.25rem;
box-shadow: inset 1px 1px 5px rgba(0, 0, 0, 0.5);
}
.output pre {
text-align: right;
font-size: 25px;
margin: 0;
font-family: 'Orbitron', sans-serif;
width: 288px;
overflow-x: auto;
-ms-overflow-style: none;
scrollbar-width: none;
}
.output pre::-webkit-scrollbar {
display: none;
}
.output #upper {
color: #424242;
font-size: 18px;
}
.input {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.input button {
width: calc(25% - 24px);
height: 50px;
margin: 8px 12px;
border-radius: 50%;
background-color: #c05d5d;
box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 0.3),
1px 1px 5px rgba(94, 31, 31, 0.7);
color: white;
font-size: 20px;
font-weight: bold;
cursor: pointer;
outline: none;
border: none;
}
.input button:hover {
background-color: #b35555;
}
.input button:active {
box-shadow: inset 1px 1px 5px rgba(94, 31, 31, 0.7),
inset -1px -1px 2px rgba(255, 255, 255, 0.3);
color: #642929;
}
我们已经完成了计算器的设计。现在,我们需要创建 JavaScript 代码以使计算器工作。
Javascript计算器代码
现在让我们为计算器编写 JavaScript 代码。
一、选择要素
在 HTML 部分,您可以看到有 2 个输出元素。使用querySelector方法选择它们。
// Select the output elements
// upper output is for showing the expression
let outputUpper = document.querySelector('#upper');
// lower output is for showing the result
let outputLower = document.querySelector('#lower');
'outputLower'是显示用户给出的表达式和结果输出的地方。
'outputUpper'是用户给出的表达式将在结果上方以小尺寸显示的位置,以便用户可以同时看到他们的表达式和结果。
二、现在创建一个函数来输入数字。
// function to get number input
function pressNum(e) {
if (outputLower.innerHTML === '0') {
outputLower.innerHTML = e.innerHTML;
} else {
outputLower.innerHTML += e.innerHTML;
}
}
当按下任意数字按钮时,将调用上述函数。它将检查 outputLower(表达式)是否为 0。如果它是 0,那么它将用按下的数字替换 0。如果不为 0,则将按下的数字添加到 outputLower。
该函数使用此关键字获取按下的数字。
三、现在创建函数来输入运算符。
// function to get operator input
function pressOperator(e) {
// check last operator
let lastOperator = outputLower.innerHTML.slice(-1);
if (lastOperator === '+' || lastOperator === '-' || lastOperator === '×' || lastOperator === '÷') {
output.innerHTML = outputLower.innerHTML.slice(0, -1) + e.innerHTML;
} else {
outputLower.innerHTML += e.innerHTML;
}
}
当按下任何操作员按钮时,将调用上述函数。它将检查表达式中的最后一个运算符是否为 +、-、× 或 ÷。如果是 +、-、× 或 ÷,那么它将用按下的运算符替换最后一个运算符。如果不是 +、-、× 或 ÷,则将按下的运算符添加到 outputLower。
我们正在检查和替换最后一个运算符,因为如果有人多次按 + 运算符,它就会变成 ++ 或 +++,这不是一个有效的运算符。或者可能有大小写或 +*、+/+ 等。所以我们用新按下的运算符替换最后一个运算符。
四。现在创建函数来清除计算器。
我们有 2 个按钮来清除计算器。一个是清除按钮,另一个是清除所有按钮。
// function to clear the calculator
// clear all
function pressAllClear() {
outputUpper.innerHTML = '';
outputLower.innerHTML = '0';
}
// clear one
function pressClear() {
outputLower.innerHTML = outputLower.innerHTML.slice(0, -1);
}
要清除一个数字,我们将使用'outputLower.innerHTML.slice(0, -1)'方法。这将从表达式中删除最后一个数字。要清除所有数字,我们将使用'outputLower.innerHTML = '0';' 方法。这将用 0 替换表达式。
五、创建写点和括号的函数。
// function to get dot and bracket input
function pressDot() {
outputLower.innerHTML += '.';
}
function pressBracket(e) {
outputLower.innerHTML += e.innerHTML;
}
六、现在创建函数来计算结果。
// function to calculate the result
function pressEqual() {
let exp = outputLower.innerHTML;
outputUpper.innerHTML = exp;
exp = exp.replace(/×/g, '*').replace(/÷/g, '/');
let result;
try {
result = eval(exp);
// if decimal number more than 4 decimal places
if (result.toString().indexOf('.') !== -1) {
result = result.toFixed(4);
}
} catch (e) {
result = 'Error';
}
outputLower.innerHTML = result;
}
按下等号按钮 (=) 时将调用上述函数。它将计算表达式的结果并将其显示在outputLower中。
我们正在使用eval()方法来计算结果。
在这里,我们在 try 和 catch 块中执行表达式。如果表达式中有任何错误,则会显示错误。
我们也在检查结果是否为十进制数。如果它是一个十进制数,那么我们将它显示为 4 个小数位。
最后,结果显示在outputLower中,相应的表达式显示在outputUpper中。
七。现在创建函数来清除表达式和所有清除屏幕。
// clear one
function pressClear() {
outputLower.innerHTML = outputLower.innerHTML.slice(0, -1);
}
// clear all
function pressAllClear() {
outputUpper.innerHTML = '';
outputLower.innerHTML = '0';
}
要清除一个数字,我们将使用'outputLower.innerHTML.slice(0, -1)'方法。这将从表达式中删除最后一个数字。要清除所有数字,我们将使用'outputLower.innerHTML = '0';' 方法。这将用 0 替换表达式。
八。现在为键盘按钮添加事件监听器。
最后,为键盘按钮添加事件监听器,这样当任何按钮被按下时,它都会调用相应的函数,用户将能够从键盘本身运行计算器。
// add event listeners for keyboard buttons
document.addEventListener('keydown', function (e) {
switch (e.key) {
case '0':
pressNum(document.querySelector('button:nth-child(2)'));
break;
case '1':
pressNum(document.querySelector('button:nth-child(5)'));
break;
case '2':
pressNum(document.querySelector('button:nth-child(6)'));
break;
case '3':
pressNum(document.querySelector('button:nth-child(7)'));
break;
case '4':
pressNum(document.querySelector('button:nth-child(9)'));
break;
case '5':
pressNum(document.querySelector('button:nth-child(10)'));
break;
case '6':
pressNum(document.querySelector('button:nth-child(11)'));
break;
case '7':
pressNum(document.querySelector('button:nth-child(13)'));
break;
case '8':
pressNum(document.querySelector('button:nth-child(14)'));
break;
case '9':
pressNum(document.querySelector('button:nth-child(15)'));
break;
case '+':
pressOperator(document.querySelector('button:nth-child(4)'));
break;
case '-':
pressOperator(document.querySelector('button:nth-child(8)'));
break;
case '*':
pressOperator(document.querySelector('button:nth-child(12)'));
break;
case '/':
pressOperator(document.querySelector('button:nth-child(16)'));
break;
case '.':
pressDot();
break;
case '(':
pressBracket(document.querySelector('button:nth-child(18)'));
break;
case ')':
pressBracket(document.querySelector('button:nth-child(19)'));
break;
case 'Enter':
// prevent default action
e.preventDefault();
pressEqual();
break;
case 'Backspace':
pressClear();
break;
case 'Escape':
pressAllClear();
break;
}
});
在上面的代码中,您可以看到我们正在使用按钮位置来获取按钮。我们正在使用'document.querySelector('button:nth-child(2)')'来获取位置为 2 的按钮。这将获取数字为 0 的按钮。依此类推。
完整的 JavaScript 计算器程序
这是一个简单计算器的完整代码。
例子
<!DOCTYPE html>
<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">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">
<title>Javascript Calculator</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Orbitron&display=swap');
body {
margin: 0;
box-sizing: border-box;
}
.container {
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
background-color: #4e4e4e;
}
.calculator {
background: #dd6f6f;
border-radius: 5px;
padding: 5px;
width: 300px;
min-width: 300px;
box-shadow: inset 2px 2px 5px rgba(255, 255, 255, 0.4),
4px 4px 10px rgba(0, 0, 0, 0.7);
}
.output {
display: flex;
flex-direction: column;
align-items: flex-end;
position: relative;
background: #ffffff;
min-height: 50px;
padding: 5px;
margin: 0 1px 10px;
border-radius: 0.25rem;
box-shadow: inset 1px 1px 5px rgba(0, 0, 0, 0.5);
}
.output pre {
text-align: right;
font-size: 25px;
margin: 0;
font-family: 'Orbitron', sans-serif;
width: 288px;
overflow-x: auto;
-ms-overflow-style: none;
scrollbar-width: none;
}
.output pre::-webkit-scrollbar {
display: none;
}
.output #upper {
color: #424242;
font-size: 18px;
}
.input {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
.input button {
width: calc(25% - 24px);
height: 50px;
margin: 8px 12px;
border-radius: 50%;
background-color: #c05d5d;
box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 0.3),
1px 1px 5px rgba(94, 31, 31, 0.7);
color: white;
font-size: 20px;
font-weight: bold;
cursor: pointer;
outline: none;
border: none;
}
.input button:hover {
background-color: #b35555;
}
.input button:active {
box-shadow: inset 1px 1px 5px rgba(94, 31, 31, 0.7),
inset -1px -1px 2px rgba(255, 255, 255, 0.3);
color: #642929;
}
</style>
</head>
<body>
<div class="container">
<div class="calculator">
<div class="output">
<pre id="upper"></pre>
<pre id="lower">0</pre>
</div>
<div class="input">
<button onclick="pressAllClear()">AC</button>
<button onclick="pressNum(this)">0</button>
<button onclick="pressClear()"><i class="fas fa-backspace"></i></button>
<button onclick="pressOperator(this)">+</button>
<button onclick="pressNum(this)">1</button>
<button onclick="pressNum(this)">2</button>
<button onclick="pressNum(this)">3</button>
<button onclick="pressOperator(this)">-</button>
<button onclick="pressNum(this)">4</button>
<button onclick="pressNum(this)">5</button>
<button onclick="pressNum(this)">6</button>
<button onclick="pressOperator(this)">×</button>
<button onclick="pressNum(this)">7</button>
<button onclick="pressNum(this)">8</button>
<button onclick="pressNum(this)">9</button>
<button onclick="pressOperator(this)">÷</button>
<button onclick="pressDot()">.</button>
<button onclick="pressBracket(this)">(</button>
<button onclick="pressBracket(this)">)</button>
<button onclick="pressEqual()">=</button>
</div>
</div>
</div>
<script>
// javascript calculator
// upper output is for showing the expression
let outputUpper = document.querySelector('#upper');
// lower output is for showing the result
let outputLower = document.querySelector('#lower');
// function to get number input
function pressNum(e) {
if (outputLower.innerHTML === '0') {
outputLower.innerHTML = e.innerHTML;
} else {
outputLower.innerHTML += e.innerHTML;
}
}
// clear all
function pressAllClear() {
outputUpper.innerHTML = '';
outputLower.innerHTML = '0';
}
// clear one
function pressClear() {
outputLower.innerHTML = outputLower.innerHTML.slice(0, -1);
}
// calculate button
function pressEqual() {
let exp = outputLower.innerHTML;
outputUpper.innerHTML = exp;
exp = exp.replace(/×/g, '*').replace(/÷/g, '/');
let result;
try {
result = eval(exp);
// if decimal number more than 4 decimal places
if (result.toString().indexOf('.') !== -1) {
result = result.toFixed(4);
}
} catch (e) {
result = 'Error';
}
outputLower.innerHTML = result;
}
function pressOperator(e) {
// check last operator
let lastOperator = outputLower.innerHTML.slice(-1);
if (lastOperator === '+' || lastOperator === '-' || lastOperator === '×' || lastOperator === '÷') {
output.innerHTML = outputLower.innerHTML.slice(0, -1) + e.innerHTML;
} else {
outputLower.innerHTML += e.innerHTML;
}
}
function pressDot() {
outputLower.innerHTML += '.';
}
function pressBracket(e) {
outputLower.innerHTML += e.innerHTML;
}
// attach keyboard event
document.addEventListener('keydown', function (e) {
switch (e.key) {
case '0':
pressNum(document.querySelector('button:nth-child(2)'));
break;
case '1':
pressNum(document.querySelector('button:nth-child(5)'));
break;
case '2':
pressNum(document.querySelector('button:nth-child(6)'));
break;
case '3':
pressNum(document.querySelector('button:nth-child(7)'));
break;
case '4':
pressNum(document.querySelector('button:nth-child(9)'));
break;
case '5':
pressNum(document.querySelector('button:nth-child(10)'));
break;
case '6':
pressNum(document.querySelector('button:nth-child(11)'));
break;
case '7':
pressNum(document.querySelector('button:nth-child(13)'));
break;
case '8':
pressNum(document.querySelector('button:nth-child(14)'));
break;
case '9':
pressNum(document.querySelector('button:nth-child(15)'));
break;
case '+':
pressOperator(document.querySelector('button:nth-child(4)'));
break;
case '-':
pressOperator(document.querySelector('button:nth-child(8)'));
break;
case '*':
pressOperator(document.querySelector('button:nth-child(12)'));
break;
case '/':
pressOperator(document.querySelector('button:nth-child(16)'));
break;
case '.':
pressDot();
break;
case '(':
pressBracket(document.querySelector('button:nth-child(18)'));
break;
case ')':
pressBracket(document.querySelector('button:nth-child(19)'));
break;
case 'Enter':
// prevent default action
e.preventDefault();
pressEqual();
break;
case 'Backspace':
pressClear();
break;
case 'Escape':
pressAllClear();
break;
}
});
</script>
</body>
</html>
结论
在这份完整的 JavaScript 计算器指南中,您已经学会了如何创建一个很棒的简单计算器。您可以使用它来计算任何数学表达式。键盘事件也附在计算器上。您也可以在您的网站或移动应用程序上使用计算器。
更多推荐
所有评论(0)