简易的JS计算器实现代码

下面是关于“简易的JS计算器实现代码”的完整攻略:

一、准备工作

要实现一个简易的JS计算器,首先需要在HTML文件中创建计算器的界面,其中需要包括如下组件:

  1. 计算器界面:使用HTML的div元素模拟。
  2. 显示框:显示计算结果。
  3. 操作按钮:包括加、减、乘、除等常见计算操作,使用HTML的button元素模拟。

在创建好计算器的界面后,需要在JS文件中获取各个操作按钮的ID,以方便后续操作,并使用addEventListener()方法为按钮添加点击事件监听器。

二、实现计算器的核心逻辑

  1. 数字按键事件

在计算器界面中,每个数字按钮被点击后,需要将其数字值显示在显示框中,即实现姆供了数字输入功能。为此,在JS文件中需要添加数字按键事件监听器,并在事件处理函数中使用JavaScript的DOM操作将按键事件中携带的数字值添加进显示框中。

示例代码如下:

const numButtons = document.querySelectorAll('.calc-button__num');
const output = document.querySelector('.calc-output');
numButtons.forEach(function(button) {
    button.addEventListener('click', function(event) {
        output.value += event.target.textContent;
    });
});
  1. 操作符按键事件

在计算器界面中,操作符按键被点击后,需要根据显示框中的数字值进行计算,并将计算结果显示在显示框中。为此,在JS文件中需要添加操作符按键事件监听器,并在事件处理函数中使用JavaScript实现计算器核心逻辑,包括数字的加减乘除等计算运算。

示例代码如下:

const operatorButtons = document.querySelectorAll('.calc-button__operator');
const calculate = function(a, b, operator) {
    switch (operator) {
        case '+':
            return a + b;
        case '-':
            return a - b;
        case '*':
            return a * b;
        case '/':
            return a / b;
        default:
            throw new Error(`Unknown operator ${operator}.`);
    }
};
let operand1 = null;
let operator = null;
operatorButtons.forEach(function(button) {
    button.addEventListener('click', function(event) {
        if (operand1 === null) {
            operand1 = Number(output.value);
            operator = event.target.textContent;
            output.value = '';
        } else {
            const operand2 = Number(output.value);
            const result = calculate(operand1, operand2, operator);
            operand1 = result;
            operator = event.target.textContent;
            output.value = '';
            output.value = result;
        }
    });
});

三、完整代码示例

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>JS Calculator</title>
    <style>
      .calc {
        display: flex;
        flex-wrap: wrap;
        width: 240px;
        margin: auto;
      }
      .calc__output {
        width: 100%;
        margin-bottom: 10px;
        font-size: 18px;
      }
      .calc-button {
        width: 50%;
        box-sizing: border-box;
        padding: 10px;
        font-size: 16px;
        text-align: center;
        background-color: #fff;
        border: 1px solid transparent;
      }
      .calc-button:hover {
        background-color: #eee;
      }
      .calc-button.--operator {
        background-color: #f5f5f5;
      }
    </style>
  </head>
  <body>
    <div class="calc">
      <input type="text" class="calc__output" />
      <button class="calc-button calc-button__num">7</button>
      <button class="calc-button calc-button__num">8</button>
      <button class="calc-button calc-button__num">9</button>
      <button class="calc-button calc-button__operator">+</button>
      <button class="calc-button calc-button__num">4</button>
      <button class="calc-button calc-button__num">5</button>
      <button class="calc-button calc-button__num">6</button>
      <button class="calc-button calc-button__operator">-</button>
      <button class="calc-button calc-button__num">1</button>
      <button class="calc-button calc-button__num">2</button>
      <button class="calc-button calc-button__num">3</button>
      <button class="calc-button calc-button__operator">*</button>
      <button class="calc-button calc-button__num">0</button>
      <button class="calc-button calc-button__operator">/</button>
      <button class="calc-button calc-button__operator">=</button>
      <button class="calc-button calc-button__operator">C</button>
    </div>
    <script>
      const numButtons = document.querySelectorAll('.calc-button__num');
      const operatorButtons = document.querySelectorAll('.calc-button__operator');
      const output = document.querySelector('.calc__output');
      const calculate = function(a, b, operator) {
        switch (operator) {
          case '+':
            return a + b;
          case '-':
            return a - b;
          case '*':
            return a * b;
          case '/':
            return a / b;
          default:
            throw new Error(`Unknown operator ${operator}.`);
        }
      };
      let operand1 = null;
      let operator = null;
      numButtons.forEach(function(button) {
        button.addEventListener('click', function(event) {
          output.value += event.target.textContent;
        });
      });
      operatorButtons.forEach(function(button) {
        button.addEventListener('click', function(event) {
          switch (event.target.textContent) {
            case '+':
            case '-':
            case '*':
            case '/':
              if (operand1 === null) {
                operand1 = Number(output.value);
              } else {
                const operand2 = Number(output.value);
                const result = calculate(operand1, operand2, operator);
                operand1 = result;
                output.value = result;
              }
              operator = event.target.textContent;
              output.value = '';
              break;
            case '=':
              if (operand1 !== null && operator !== null) {
                const operand2 = Number(output.value);
                const result = calculate(operand1, operand2, operator);
                operand1 = null;
                operator = null;
                output.value = result;
              }
              break;
            case 'C':
              operand1 = null;
              operator = null;
              output.value = '';
              break;
            default:
              throw new Error(`Unknown operator ${event.target.textContent}.`);
          }
        });
      });
    </script>
  </body>
</html>

以上是“简易的JS计算器实现代码”的完整攻略,希望能对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简易的JS计算器实现代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • JavaScript实现的字符串replaceAll函数代码分享

    下面我将详细讲解“JavaScript实现的字符串replaceAll函数代码分享”的完整攻略,包含以下内容: 什么是replaceAll函数? 如何使用正则表达式进行字符串替换? replaceAll函数的实现方法 示例说明 什么是replaceAll函数 replaceAll函数是JavaScript字符串的一个方法,用于将字符串中的所有匹配项替换成指定…

    JavaScript 2023年5月28日
    00
  • 基于iframe实现类似于ajax的页面无刷新

    基于iframe实现类似于ajax的页面无刷新,可以通过以下步骤实现: 在HTML页面中定义一个iframe标签,用于加载需要动态更新的页面; 利用JavaScript动态修改iframe标签的src属性,实现页面的加载和更新; 在被加载的页面中,通过JavaScript修改主页面中的元素。 下面我们来具体看一下实现的过程: 步骤1:定义iframe标签 在…

    JavaScript 2023年6月11日
    00
  • 基于jQuery的一个扩展form序列化到json对象

    下面是基于jQuery的一个扩展form序列化到json对象的完整攻略: 什么是jQuery的form序列化? jQuery的form序列化主要是将HTML表单中的数据(包括input、textarea、select等表单元素)封装成一个字符串,以便可以轻松地提交给服务器进行处理。 为什么需要扩展form序列化为json对象? jQuery的form序列化默…

    JavaScript 2023年5月27日
    00
  • requestAnimationFrame定时动画屏幕刷新率节流示例浅析

    下面我详细讲解一下“requestAnimationFrame定时动画屏幕刷新率节流示例浅析”的攻略。 简介 window.requestAnimationFrame() 是一个 JavaScript 函数,可用于通过浏览器的渲染引擎,来以最佳频率更新显示屏幕上的动画。 在某些情况下,使用 requestAnimationFrame() 可以连续重复执行某个…

    JavaScript 2023年6月11日
    00
  • 使用requestAnimationFrame实现js动画性能好

    使用requestAnimationFrame实现js动画的优点是可以避免过多使用setTimeout或setInterval造成的页面卡顿、CPU过度占用等问题,从而保证动画的流畅度和性能。以下是具体操作步骤: 准备工作 首先需要在代码中声明一个全局变量 requestId 用于记录动画的请求ID。然后编写动画函数,此函数需要接收一个时间参数。 let r…

    JavaScript 2023年6月10日
    00
  • javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)

    JavaScript高级程序设计第二版第十二章主要讲解了事件的相关知识点,其中包括事件的定义方式、事件处理程序、事件流、事件对象、跨浏览器问题的处理等内容。本章提供了一些实用的跨浏览器检测方法,以保证代码在各个浏览器平台下能够正常工作。下面是本章的要点总结: 事件处理程序 常见的事件处理程序有两种定义方式: HTML事件处理程序:直接将事件处理程序添加到HT…

    JavaScript 2023年5月27日
    00
  • js中 javascript:void(0) 用法详解

    js中 javascript:void(0) 用法详解 在JavaScript开发中,我们经常会遇到一种URL地址是”javascript:void(0)”的情况,它本身并不是一个有效的URL,而是一种特殊的语法,它的应用范围非常广泛。本文将详细讲解”javascript:void(0)”的用法。 1. 作为超链接的href值 最常见的用法是将”javasc…

    JavaScript 2023年5月18日
    00
  • JavaScript中string转换成number介绍

    当需要在JavaScript中使用数字时,需要将字符串转换为数字。在JavaScript中有三种方式可以将字符串转换为数字类型:Number(), parseInt() 和 parseFloat()。下面对这三种方式进行详细介绍。 Number()方法: Number()方法可以把任何JavaScript对象转换为数字。如果对象是一个字符串,字符串只包含数字…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部