📚 引言
在前端开发的奇妙之旅中,构建一个既实用又具教育意义的计算器是提升技能的绝佳途径。本篇笔记将引导你从零开始,打造一个增强版的JavaScript计算器。这个计算器不仅支持基本的加减乘除运算,还能实时显示计算过程,让你一目了然每一步操作及其结果。👨💻✨
实现效果 🚀
HTML结构设计 🧱
首先,我们构建一个简洁而功能丰富的HTML结构,包括输入结果显示区和计算公式展示区。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>简易计算器</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="calculator">
<div class="display-container">
<label for="displayResult"></label>
<input type="text" id="displayResult" disabled />
<p id="displayFormula" class="formula"></p>
</div>
<div id="buttons">
<!-- 数字按钮 -->
<button>1</button>
<button>2</button>
<button>3</button>
<button>4</button>
<button>5</button>
<button>6</button>
<button>7</button>
<button>8</button>
<button>9</button>
<button>0</button>
<!-- 运算符按钮 -->
<button>+</button>
<button>-</button>
<button>*</button>
<button>/</button>
<!-- 特殊按钮 -->
<button id="clear">C</button>
<button id="equals">=</button>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
CSS样式美化 🎨
为计算器增添视觉吸引力,我们通过CSS进行细致的样式定制。
/* style.css */ #calculator { width: 300px; margin: 50px auto; border: 1px solid #ccc; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); }
.display-container {
text-align: center;
margin-bottom: 20px;
}#displayResult {
width: 100%;
margin-bottom: 5px;
padding: 5px;
font-size: 24px;
text-align: right;
}.formula {
color: #666;
font-size: 16px;
text-align: right;
}button {
width: 50px;
height: 50px;
margin: 5px;
font-size: 20px;
cursor: pointer;
}
button:hover {
background-color: #ddd;
}
JavaScript逻辑实现 💻
核心部分来了!我们编写JavaScript逻辑,让计算器“活”起来,能够响应用户的每一次点击,实时更新显示结果和计算公式。
// script.js
document.addEventListener('DOMContentLoaded', () => {
const displayResult = document.getElementById('displayResult');
const displayFormula = document.getElementById('displayFormula');
let firstValue = null;
let operator = null;
let currentInput = '';
let formulaDisplay = '';document.getElementById('buttons').addEventListener('click', (event) => { const target = event.target; if (target.tagName !== 'BUTTON') return; const value = target.textContent; // 数字输入 if (!isNaN(value)) { currentInput += value; displayResult.value = currentInput; formulaDisplay += value; displayFormula.textContent = formulaDisplay; } // 运算符处理 else if ('+-*/'.includes(value)) { if (operator && !currentInput) return; // 如果已有运算符且未输入新数字,则不处理 if (firstValue === null) { firstValue = parseFloat(currentInput); formulaDisplay += ` ${value} `; } else { // 计算并更新显示 const secondValue = parseFloat(currentInput); firstValue = operate(operator, firstValue, secondValue); formulaDisplay = `${firstValue} ${value} `; displayFormula.textContent = formulaDisplay; } operator = value; currentInput = ''; } // 等号计算 else if (value === '=') { if (operator && currentInput) { const secondValue = parseFloat(currentInput); firstValue = operate(operator, firstValue, secondValue); formulaDisplay += ` = ${firstValue}`; displayFormula.textContent = formulaDisplay; displayResult.value = firstValue; currentInput = ''; operator = null; } } // 清除输入 else if (value === 'C') { firstValue = null; operator = null; currentInput = ''; formulaDisplay = ''; displayResult.value = '0'; displayFormula.textContent = formulaDisplay; } }); function operate(op, a, b) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': if (b === 0) throw new Error('Division by zero'); return a / b; default: throw new Error('Invalid operation'); } }
});
关键点解析 🔍
- 显示逻辑:我们通过两个
<div>
分别展示最终结果和计算公式,使得用户在获得答案的同时,也能清楚地看到整个计算过程。 - 运算处理:在
operate
函数中,我们封装了基本的数学运算逻辑,并特别处理了除法中的除以零错误。 - 事件处理:每个按钮点击事件都被精确捕捉,并根据点击内容执行相应的操作,如数字输入、运算符应用、计算结果显示及清除操作。
🎖 总结
通过上述步骤,我们成功构建了一个不仅能够完成基础数学运算,还能清晰展示计算过程的增强版JavaScript计算器。这个项目不仅加深了你对JavaScript事件处理、DOM操作以及基本算法的理解,还展示了如何通过前端技术提升用户体验。希望这次实战经验能够成为你编程旅程中的一个闪亮里程碑,激励你在前端开发领域不断探索与成长!🚀