JavaScript制作简版计算器,提供加减乘除功能

简介: JavaScript制作简版计算器,提供加减乘除功能

📚 引言

前端开发的奇妙之旅中,构建一个既实用又具教育意义的计算器是提升技能的绝佳途径。本篇笔记将引导你从零开始,打造一个增强版的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操作以及基本算法的理解,还展示了如何通过前端技术提升用户体验。希望这次实战经验能够成为你编程旅程中的一个闪亮里程碑,激励你在前端开发领域不断探索与成长!🚀

目录
相关文章
|
25天前
|
JavaScript 前端开发 安全
盘点原生JS中目前最没用的几个功能API
在JavaScript的发展历程中,许多功能与API曾风光无限,但随着技术进步和语言演化,部分功能逐渐被淘汰或被更高效的替代方案取代。例如,`with`语句使代码作用域复杂、可读性差;`void`操作符功能冗余且影响可读性;`eval`函数存在严重安全风险和性能问题;`unescape`和`escape`函数已被`decodeURIComponent`和`encodeURIComponent`取代;`arguments`对象则被ES6的剩余参数语法替代。这些变化体现了JavaScript不断优化的趋势,开发者应紧跟技术步伐,学习新技能,适应新技术环境。
43 10
|
1月前
|
JavaScript 前端开发
【Vue.js】监听器功能(EventListener)的实际应用【合集】
而此次问题的核心就在于,Vue实例化的时机过早,在其所依赖的DOM结构尚未完整构建完成时就已启动挂载流程,从而导致无法找到对应的DOM元素,最终致使计算器功能出现异常,输出框错误地显示“{{current}}”,并且按钮的交互功能也完全丧失响应。为了让代码结构更为清晰,便于后续的维护与管理工作,我打算把HTML文件中标签内的JavaScript代码迁移到外部的JS文件里,随后在HTML文件中对其进行引用。
52 8
|
2月前
|
JavaScript 容器
带方向感知功能的js图片遮罩层插件
带方向感知功能的js图片遮罩层插件
|
3月前
|
JavaScript 前端开发 容器
jQuery多功能滑块插件r-slider.js
r-slider.js是一款jQuery多功能滑块插件。使用该插件,可以制作出滑块、开关按钮、进度条、向导步骤等多种效果。
65 5
|
3月前
|
JavaScript
js实现简洁实用的网页计算器功能源码
这是一款使用js实现简洁实用的网页计算器功能源码。可实现比较基本的加减乘除四则运算功能,界面简洁实用,是一款比较基本的js运算功能源码。该源码可兼容目前最新的各类主流浏览器。
54 2
|
4月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
110 1
|
4月前
|
JavaScript 前端开发 API
|
4月前
|
JavaScript API UED
vue.js怎么实现全屏显示功能
【10月更文挑战第7天】
100 1
|
4月前
|
JavaScript 搜索推荐
JS中的模糊查询功能
JS中的模糊查询功能
69 1
|
4月前
|
前端开发 JavaScript
使用 JavaScript 实现图片预览功能
使用 JavaScript 实现图片预览功能
92 0

热门文章

最新文章

  • 1
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    23
  • 2
    Node.js 中实现多任务下载的并发控制策略
    32
  • 3
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    25
  • 4
    【JavaScript】深入理解 let、var 和 const
    48
  • 5
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    44
  • 6
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    53
  • 7
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    55
  • 8
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    71
  • 9
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    55
  • 10
    JavaWeb JavaScript ③ JS的流程控制和函数
    62