实现了一个简易的计算器

news2024/9/27 19:24:19

计算器的界面如下:

在这里插入图片描述
实现过程:

  1. 通过html和css编写这样一个界面
  2. JavaScript实现功能

在通过JavaScript实现计算器功能的过程中,其实使用的都是一些基本指数。主要包括以下几点:

  1. If/else 分支.
  2. For 循环
  3. JavaScript 函数
  4. 箭头函数
  5. && 和 || 操作符
  6. 如何使用textContent属性修改文本
  7. 如何使用事件代理模式添加事件

实现过程其实主要关注的是一些细节问题,例如:

  • 通过事件代理监听按键:
const calculator = document.querySelector(.calculator’)
const keys = calculator.querySelector(.calculator__keys’)

keys.addEventListener(‘click’, e => {
 if (e.target.matches(‘button’)) {
   // Do something
 }
})
  • 通过data-action确定点击按键的类型
const key = e.target
const action = key.dataset.action

data-action是通过这样的方式赋值的:

在这里插入图片描述

如果没有data-action,则代表是数字。

  • 考虑在一个计算器中可能会被按的键类型:数字键(0-9)、操作键 (+,-,×,÷)、小数点键、等号键、清除键。在这个过程中,最主要就是要获取到被按到的键和当前应该显示的数值,我们可以通过textContent和点击按键的.calculator__display分别获取到这两个值。
const display = document.querySelector('.calculator__display')

keys.addEventListener('click', e => {
  if (e.target.matches('button')) {
    const key = e.target
    const action = key.dataset.action
    const keyContent = key.textContent
    const displayedNum = display.textContent
    // ...
  }
})

  • 当操作者按小数点时,我们需要将.添加到已经显示的数字后面。
if (action === 'decimal') {
  display.textContent = displayedNum + '.'
}
  • 当操作者按操作符时,我们给操作符按钮添加一个名字叫is-depressed的类名。
if (action === 'add' || action === 'subtract' || action === 'multiply' || action === 'divide') {
  key.classList.add('is-depressed')
}
  • 当操作者再次点击了数字键,之前显示的数字应该被替换成新的数组。操作键也应该被解除“被点击”的状态。我们可以使用forEach循环遍历所有的按键,去移除is-depressed类
keys.addEventListener('click', e => {
  if (e.target.matches('button')) {
    const key = e.target
    // ...
    
    // Remove .is-depressed class from all keys
    Array.from(key.parentNode.children)
      .forEach(k => k.classList.remove('is-depressed'))
  }
})
  • 当操作者点击等号键,计算器应该根据三个值:第一个输入计算器中的数字、操作符、第二个输入计算器中的数字,计算一个结果。在计算之后,结果会替换当前已显示的值出现在屏幕上。
const calculate = (n1, operator, n2) => {
  let result = ''
  if (operator === 'add') {
    result = n1 + n2
  } else if (operator === 'subtract') {
    result = n1 - n2
  } else if (operator === 'multiply') {
    result = n1 * n2
  } else if (operator === 'divide') {
    result = n1 / n2
  }

这个简单的功能就完成啦!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1243134.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DRAM(Distilling and Refining Annotations of Metabolism,提取和精练代谢注释)工具安装和使用

先看文章介绍吧:DRAM for distilling microbial metabolism to automate the curation of microbiome function | Nucleic Acids Research | Oxford Academic (oup.com) 1、安装 默认使用conda安装吧,也建议使用conda,pip安装其实都差不多&a…

低代码表单设计器:可视化+灵活+易操作,降本增效轻松实现!

在现代化办公环境中,拥有先进的低代码表单设计器,可以让企业降本又增效,节约企业成本的同时,也能高效利用企业内部资源,为实现数字化转型升级提供夯实根基。那么,低代码表单设计器拥有什么样的特点&#xf…

志愿服务暖人心,村委致谢送锦旗

“衷心感谢济宁市运河义工服务协会对我们村里的大学生凯凯一直以来的关注和帮扶。真是太谢谢您们了,如不是您们的帮助孩子也不能那么放心地去上大学,毕竟家里有从小就相依为命的年迈的奶奶,是他一直的担心和牵挂, 咱们协会不仅对孩…

Django中间件与csrf

一. django中间件 1. 什么是django中间件 # django中间件是django的门户1. 请求来的时候需要先经过中间件才能到达真正的django后端2. 响应走的时候最后也需要经过中间件才能发送出去 2. django中间件的个数 django自带七个中间件, 分别是SecurityMiddleware, SessionMiddle…

Linux宝塔面板搭建Discuz论坛, 并内网穿透实现公网访问

Linux宝塔面板搭建Discuz论坛, 并内网穿透实现公网访问 文章目录 Linux宝塔面板搭建Discuz论坛, 并内网穿透实现公网访问前言1.安装基础环境2.一键部署Discuz3.安装cpolar工具4.配置域名访问Discuz5.固定域名公网地址6.配置Discuz论坛 📷 江池…

深兰科技“汉境”入选2023年湖北省人工智能十大优秀应用案例

11月18日,央视“专精特新制造强国”城市大会在湖北武汉召开。会上,正式发布了“湖北省工业互联网标识十大优秀应用案例”,由深兰科技(武汉)股份有限公司基于AIGC多模态融合大模型技术开发打造的江汉路步行街元宇宙场景应用——汉境&#xff0…

Python爬虫基础教程之urllib和requests的区别详解

文章目录 前言1、获取网页数据第一步,引入模块。第二步,简单网页发起的请求。第三步,数据封装。 2、解析网页数据3.保存数据关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项…

关于ElectronVue3中集成讯飞星火AI

前言:我的最终目的是为了在QQ上集成一个AI机器人,因此在这里先实现一个简单的集成 先上效果图 总体还是很简单的,我在调用websock获取回复内容的基础上另外集成了一个事件总线,让我们在调用获取消息的时候能够更加方便快捷 工具代…

【SwiftUI】7.预览及其内部机制

上一篇讲到了组件及组件化,从概念和优/缺点两个方向说明了组件化的意义,更为重要的是,组件和组件化是一个在编程领域,放之四海皆可以的概念,理解和运用它是非常必要的,希望大家能掌握。今天我们介绍另一个特…

Spring第一课,了解IDEA里面的文件,回顾Cookie和Session,获取Session,Cookie,Header的方式

目录 IDEA第一课(熟悉里面内容) 建立连接 -RequestMapping 路由映射 请求 1.传递单个参数​编辑 2.多个参数​编辑 3.传递数组 4.传递一个集合,但是这里我们传递的时候发生了500的错误 简单介绍JSON 回顾Cookie和S…

软文推广中如何提炼好产品卖点,媒介盒子分享

内容同质化的时代下,企业应该如何让用户留下印象,并且成功将产品卖出去,核心思维就在于提炼产品卖点,产品卖点是销量提升的关键,相信企业在推广产品时都会有点困惑,感觉自家产品和竞品比起来只是logo、外观…

【SpringCloud】为什么选择微服务?

一般的平台会遇到的问题: 服务配置复杂。基础服务多,服务的资源配置复杂,传统方式管理服务复杂 服务之间调用复杂。检索服务、用户中心服务等,服务之间的调用复杂,依赖多 服务监控难度大。服务比较多,…

【SpringCloud】什么是微服务?

一、单体架构 单体架构就是把所有业务模块编写在一个项目,最终打包成一个 war 包,进行部署 单体架构的优点: 部署简单:由于是完整的结构体,可以直接部署在一个服务器上即可 技术单一:项目不需要复杂的…

世界这么大,极米投影仪RS Pro 3任意门带你“云旅游”

在繁忙的工作之后,许多小伙伴选择出门旅游,但也有不少人想在家“躺平”。其实,对于当代年轻人来说,行走在钢筋混凝土丛林,在家用智能投影观影娱乐好好放松身心也是不错的选择。有一台投影仪来相伴,能够抚平…

Let’s xrOS 一款让你优先体验社区创作者的 visionOS App工具

Let’s xrOS Apple Vision Pro 发布预示着空间计算时代的到来,让科技爱好者和开发者开始思考如何在新的交互、系统和硬件上打造独特的三维应用。 自 WWDC 2023 的发布会后,社交媒体上涌现了许多精美的 visionOS App 的效果图和演示视频,然而…

Mac安装配置typescript及在VSCode上运行ts

一、Mac上安装typescript sudo npm install -g typescript 测试一下:出现Version则证明安装成功 tsc -v 二、在VSCode上运行 新建一个xxx.ts文件,测试能否运行 console.log("helloworld") 运行报错:ts-node: command not…

【无标题】学习HTML

由于工作需求,学习了一些html的相关知识,最终应用到打印功能上使用。 HTML是指超文本标记语言(HyperText Markup Language)。它是一种用于创建和呈现互联网上页面的标准标记语言。HTML是Web开发的基础,是构建网页和应…

关于SseEmitter(SSE)在本地可以响应,部署到服务器后无法响应的问题

关于SseEmitter(SSE)在本地可以响应,部署到服务器后无法响应的问题 GetMapping(value "/v3/detail", produces MediaType.TEXT_EVENT_STREAM_VALUE) ResponseBody public SseEmitter v3Detail(String id) {SseEmitter emitter new SseEmitter((long) …

探究Kafka原理-2.Kafka基本命令实操

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码、Kafka原理🔥如果感觉博主的文章还不错的话,请&#x1f44…

【开源】基于JAVA的高校实验室管理系统

项目编号: S 015 ,文末获取源码。 \color{red}{项目编号:S015,文末获取源码。} 项目编号:S015,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容2.1 实验室类型模块2.2 实验室模块2.3 实…