当前位置:首页 > JavaScript

js实现计算器代码

2026-03-01 08:58:14JavaScript

以下是一个简单的JavaScript计算器实现代码示例,包含基本功能和结构说明:

js实现计算器代码

HTML部分

<div class="calculator">
  <input type="text" class="calculator-screen" disabled />
  <div class="calculator-keys">
    <button type="button" class="operator" value="+">+</button>
    <button type="button" class="operator" value="-">-</button>
    <button type="button" class="operator" value="*">&times;</button>
    <button type="button" class="operator" value="/">&divide;</button>

    <button type="button" value="7">7</button>
    <button type="button" value="8">8</button>
    <button type="button" value="9">9</button>

    <button type="button" value="4">4</button>
    <button type="button" value="5">5</button>
    <button type="button" value="6">6</button>

    <button type="button" value="1">1</button>
    <button type="button" value="2">2</button>
    <button type="button" value="3">3</button>

    <button type="button" value="0">0</button>
    <button type="button" class="decimal" value=".">.</button>
    <button type="button" class="all-clear" value="all-clear">AC</button>

    <button type="button" class="equal-sign" value="=">=</button>
  </div>
</div>

CSS部分

.calculator {
  max-width: 300px;
  margin: 0 auto;
}
.calculator-screen {
  width: 100%;
  height: 80px;
  border: none;
  background-color: #252525;
  color: #fff;
  text-align: right;
  padding-right: 20px;
  font-size: 2rem;
}
.calculator-keys {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-gap: 10px;
  padding: 10px;
}
button {
  height: 60px;
  font-size: 1.5rem;
  border-radius: 5px;
  border: none;
}
.operator {
  background-color: #f1a33c;
  color: #fff;
}
.all-clear {
  background-color: #f0595f;
  color: #fff;
}
.equal-sign {
  background-color: #2e86c0;
  color: #fff;
  grid-row: span 3;
}

JavaScript部分

const calculator = {
  displayValue: '0',
  firstOperand: null,
  waitingForSecondOperand: false,
  operator: null,
};

function updateDisplay() {
  const display = document.querySelector('.calculator-screen');
  display.value = calculator.displayValue;
}

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 && !isNaN(inputValue)) {
    calculator.firstOperand = inputValue;
  } else if (operator) {
    const result = calculate(firstOperand, inputValue, operator);
    calculator.displayValue = `${parseFloat(result.toFixed(7))}`;
    calculator.firstOperand = result;
  }

  calculator.waitingForSecondOperand = true;
  calculator.operator = nextOperator;
}

function calculate(firstOperand, secondOperand, operator) {
  switch (operator) {
    case '+':
      return firstOperand + secondOperand;
    case '-':
      return firstOperand - secondOperand;
    case '*':
      return firstOperand * secondOperand;
    case '/':
      return firstOperand / secondOperand;
    default:
      return secondOperand;
  }
}

function resetCalculator() {
  calculator.displayValue = '0';
  calculator.firstOperand = null;
  calculator.waitingForSecondOperand = false;
  calculator.operator = null;
}

document.querySelector('.calculator-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;
  }

  if (target.classList.contains('equal-sign')) {
    if (calculator.waitingForSecondOperand) {
      return;
    }
    if (calculator.operator) {
      handleOperator(target.value);
    }
    updateDisplay();
    calculator.waitingForSecondOperand = true;
    return;
  }

  inputDigit(target.value);
  updateDisplay();
});

updateDisplay();

功能说明

  • 支持基本四则运算(加减乘除)
  • 支持小数运算
  • 支持连续运算(如 1+2*3=)
  • AC按钮可清除所有状态
  • 使用事件委托处理按钮点击
  • 计算结果保留7位小数精度

这个实现可以通过CSS进一步美化,或通过JavaScript添加更多功能如百分比计算、平方根等高级运算功能。

标签: 计算器代码
分享给朋友:

相关文章

css制作计算器界面

css制作计算器界面

使用CSS制作计算器界面 制作计算器界面需要结合HTML结构、CSS样式以及可能的JavaScript交互功能。以下是纯CSS部分的实现方法,创建一个基础计算器界面。 HTML结构 先构建一个简单的…

vue实现登录代码

vue实现登录代码

以下是一个基于 Vue.js 的登录功能实现示例,包含表单验证和异步请求处理: 基础组件结构 <template> <div class="login-container"&g…

vue实现轮播图代码

vue实现轮播图代码

Vue实现轮播图代码 以下是一个基于Vue 3的轮播图实现示例,包含自动轮播、手动切换和指示器功能。 基础结构 <template> <div class="carousel-…

vue代码实现清除缓存

vue代码实现清除缓存

清除浏览器缓存的方法 在Vue项目中清除缓存通常涉及版本控制、强制刷新或服务端配置。以下是几种常见实现方式: 修改文件名添加哈希 通过webpack配置在打包时为静态文件添加哈希值,确保每次更新后文…

vue实现视频列表代码

vue实现视频列表代码

以下是一个基于Vue.js的视频列表实现示例,包含关键功能代码和说明: 视频列表基础实现 <template> <div class="video-list">…

js代码实现vue文件

js代码实现vue文件

使用 JavaScript 解析和生成 Vue 文件 Vue 文件(.vue)通常包含模板、脚本和样式三部分。以下是使用 JavaScript 解析和生成 Vue 文件的方法。 解析 Vue 文件…