当前位置:首页 > 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
分享给朋友:

相关文章

css制作计算器界面

css制作计算器界面

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

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…