当前位置:首页 > JavaScript

js实现计算器

2026-01-12 13:00:08JavaScript

实现基础计算器功能

使用JavaScript创建一个基础计算器需要处理数字输入、运算符逻辑和结果显示。以下是一个简单的实现示例:

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

const display = document.getElementById('display');

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

document.querySelectorAll('.number').forEach(button => {
    button.addEventListener('click', () => {
        if (currentInput === '0' || resetScreen) {
            currentInput = '';
            resetScreen = false;
        }
        currentInput += button.textContent;
        updateDisplay();
    });
});

document.querySelectorAll('.operator').forEach(button => {
    button.addEventListener('click', () => {
        if (operation !== null) calculate();
        previousInput = currentInput;
        operation = button.textContent;
        resetScreen = true;
    });
});

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;
    updateDisplay();
}

document.getElementById('equals').addEventListener('click', () => {
    calculate();
});

document.getElementById('clear').addEventListener('click', () => {
    currentInput = '0';
    previousInput = '';
    operation = null;
    updateDisplay();
});

对应HTML结构

计算器需要基本的HTML结构来容纳按钮和显示区域:

<div class="calculator">
    <input type="text" id="display" readonly>
    <div class="buttons">
        <button class="number">7</button>
        <button class="number">8</button>
        <button class="number">9</button>
        <button class="operator">/</button>
        <button class="number">4</button>
        <button class="number">5</button>
        <button class="number">6</button>
        <button class="operator">*</button>
        <button class="number">1</button>
        <button class="number">2</button>
        <button class="number">3</button>
        <button class="operator">-</button>
        <button class="number">0</button>
        <button id="clear">C</button>
        <button id="equals">=</button>
        <button class="operator">+</button>
    </div>
</div>

添加CSS样式

基础样式可以提升计算器的视觉体验:

.calculator {
    width: 200px;
    margin: 0 auto;
    padding: 20px;
    background: #f4f4f4;
    border-radius: 10px;
}

#display {
    width: 100%;
    margin-bottom: 10px;
    padding: 10px;
    font-size: 18px;
    text-align: right;
}

.buttons {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
}

button {
    padding: 10px;
    font-size: 16px;
    border: none;
    border-radius: 5px;
    background: #ddd;
    cursor: pointer;
}

button:hover {
    background: #ccc;
}

扩展功能实现

要实现更高级的计算器功能,可以考虑添加以下特性:

// 小数点功能
document.getElementById('decimal').addEventListener('click', () => {
    if (resetScreen) {
        currentInput = '0.';
        resetScreen = false;
    } else if (!currentInput.includes('.')) {
        currentInput += '.';
    }
    updateDisplay();
});

// 百分比功能
document.getElementById('percent').addEventListener('click', () => {
    currentInput = (parseFloat(currentInput) / 100).toString();
    updateDisplay();
});

// 正负号切换
document.getElementById('toggle-sign').addEventListener('click', () => {
    currentInput = (parseFloat(currentInput) * -1).toString();
    updateDisplay();
});

处理键盘输入

为提升用户体验,可以添加键盘支持:

document.addEventListener('keydown', (e) => {
    if (e.key >= '0' && e.key <= '9') {
        if (currentInput === '0' || resetScreen) {
            currentInput = '';
            resetScreen = false;
        }
        currentInput += e.key;
        updateDisplay();
    } else if (['+', '-', '*', '/'].includes(e.key)) {
        if (operation !== null) calculate();
        previousInput = currentInput;
        operation = e.key;
        resetScreen = true;
    } else if (e.key === '.' && !currentInput.includes('.')) {
        currentInput += '.';
        updateDisplay();
    } else if (e.key === 'Enter' || e.key === '=') {
        calculate();
    } else if (e.key === 'Escape') {
        currentInput = '0';
        previousInput = '';
        operation = null;
        updateDisplay();
    }
});

错误处理

添加基本错误处理防止计算异常:

js实现计算器

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

    if (isNaN(prev) || isNaN(current)) return;

    try {
        switch (operation) {
            case '+':
                result = prev + current;
                break;
            case '-':
                result = prev - current;
                break;
            case '*':
                result = prev * current;
                break;
            case '/':
                if (current === 0) {
                    currentInput = 'Error';
                    operation = null;
                    updateDisplay();
                    return;
                }
                result = prev / current;
                break;
            default:
                return;
        }

        currentInput = result.toString();
        operation = null;
        updateDisplay();
    } catch (e) {
        currentInput = 'Error';
        updateDisplay();
    }
}

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

相关文章

js实现分页

js实现分页

分页的基本实现思路 在JavaScript中实现分页功能通常需要结合前端和后端逻辑。前端负责渲染分页控件和处理用户交互,后端负责提供分页数据。 前端分页实现 纯前端分页适用于数据量较小的情况,可以直…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…