当前位置:首页 > 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布局确保按钮排列整齐。

js计算器的实现

.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;
}

高级功能扩展

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

js计算器的实现

// 添加小数点处理
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属性存储操作类型,简化条件判断。

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实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现复制功能

js实现复制功能

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

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…