当前位置:首页 > JavaScript

js计算器的实现

2026-02-28 21:34:28JavaScript

基本HTML结构

创建一个简单的HTML框架,包含显示屏和按钮区域。使用<div><button>元素构建界面,通过CSS进行基础样式设计。

<div class="calculator">
  <div class="display">0</div>
  <div class="buttons">
    <button>7</button>
    <button>8</button>
    <button>9</button>
    <button>+</button>
    <!-- 其他按钮 -->
  </div>
</div>

样式设计

通过CSS设置计算器的外观,包括按钮布局、颜色和显示屏样式。使用Flexbox或Grid布局确保按钮排列整齐。

.calculator {
  width: 300px;
  margin: 0 auto;
  border: 1px solid #ccc;
  border-radius: 5px;
  padding: 10px;
}
.display {
  height: 50px;
  background: #f4f4f4;
  text-align: right;
  font-size: 24px;
  padding: 10px;
}
.buttons {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 5px;
}
button {
  height: 50px;
  font-size: 18px;
}

JavaScript逻辑实现

通过事件监听捕获按钮点击,处理数字输入、运算符和计算逻辑。使用eval()或手动解析表达式实现运算功能。

const display = document.querySelector('.display');
const buttons = document.querySelectorAll('button');

let currentInput = '0';
let previousInput = '';
let operation = null;

buttons.forEach(button => {
  button.addEventListener('click', () => {
    const value = button.textContent;

    if (value >= '0' && value <= '9') {
      handleNumber(value);
    } else if (value === '+' || value === '-' || value === '*' || value === '/') {
      handleOperator(value);
    } else if (value === '=') {
      calculate();
    } else if (value === 'C') {
      clearAll();
    }
    updateDisplay();
  });
});

function handleNumber(num) {
  if (currentInput === '0') {
    currentInput = num;
  } else {
    currentInput += num;
  }
}

function handleOperator(op) {
  if (operation !== null) calculate();
  previousInput = currentInput;
  currentInput = '0';
  operation = op;
}

function calculate() {
  let result;
  const prev = parseFloat(previousInput);
  const current = parseFloat(currentInput);

  switch (operation) {
    case '+':
      result = prev + current;
      break;
    case '-':
      result = prev - current;
      break;
    case '*':
      result = prev * current;
      break;
    case '/':
      result = prev / current;
      break;
    default:
      return;
  }

  currentInput = result.toString();
  operation = null;
  previousInput = '';
}

function clearAll() {
  currentInput = '0';
  previousInput = '';
  operation = null;
}

function updateDisplay() {
  display.textContent = currentInput;
}

高级功能扩展

在基础功能上增加小数点处理、退格键功能和键盘支持。通过正则表达式验证输入,防止非法操作。

// 添加小数点处理
function handleDecimal() {
  if (!currentInput.includes('.')) {
    currentInput += '.';
  }
}

// 添加键盘支持
document.addEventListener('keydown', (e) => {
  if (e.key >= '0' && e.key <= '9') {
    handleNumber(e.key);
  } else if (e.key === '+' || e.key === '-' || e.key === '*' || e.key === '/') {
    handleOperator(e.key);
  } else if (e.key === 'Enter') {
    calculate();
  } else if (e.key === 'Escape') {
    clearAll();
  } else if (e.key === '.') {
    handleDecimal();
  }
  updateDisplay();
});

错误处理与边界情况

增加除以零检查、输入限制和溢出处理。通过条件判断确保计算结果的合理性。

function calculate() {
  let result;
  const prev = parseFloat(previousInput);
  const current = parseFloat(currentInput);

  if (operation === '/' && current === 0) {
    currentInput = 'Error';
    operation = null;
    previousInput = '';
    return;
  }

  // 其他运算逻辑...
}

性能优化

使用事件委托替代单独按钮监听,减少内存占用。通过dataset属性存储操作类型,简化条件判断。

js计算器的实现

document.querySelector('.buttons').addEventListener('click', (e) => {
  if (e.target.tagName === 'BUTTON') {
    const action = e.target.dataset.action;
    const value = e.target.textContent;

    if (!action) {
      handleNumber(value);
    } else if (action === 'operator') {
      handleOperator(value);
    } else if (action === 'calculate') {
      calculate();
    } else if (action === 'clear') {
      clearAll();
    }
    updateDisplay();
  }
});

标签: 计算器js
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…