实现了一个简易的计算器

计算器的界面如下:

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

  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.targetconst action = key.dataset.actionconst keyContent = key.textContentconst 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 keysArray.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.mzph.cn/news/163866.shtml

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

相关文章

日志分析对决:揭示 ELK 与 GrayLog 的优势和差异

🎏:你只管努力,剩下的交给时间 🏠 :小破站 日志分析对决:揭示 ELK 与 GrayLog 的优势和差异 前言第一:ELK Stack简介第二:GrayLog简介架构:主要特性: 第三&am…

腾讯待办关停,怎么在手机上记录待办清单并设置提醒?

如果你之前一直在腾讯待办这款微信小程序中记录待办事项,那么你就会发现小程序中弹窗的“业务关停通知”弹窗,查看其中的内容可知,由于业务方向调整,腾讯待办将于2023年12月20日全面停止运营并下架,这就意味着我们无法…

面试:MyBatis问题

文章目录 什么是MyBatis?MyBatis的核心组件有哪些?能说说MyBatis的工作原理吗?MyBatis的工作流程是怎样的?Mybaits 的优点 & 缺点MyBatis 与 JPA 有哪些不同?MyBatis一二级缓存的区别?MyBatis如何处理延迟加载&am…

【一文搞定】在Docker中搭建centos7远程桌面环境(Xfce、Gnome两种方式)

目录 前言一、基于GNOME构建远程桌面二、基于Xfce构建远程桌面(轻量级) 前言 本文提供两种安装方式,均自己测试过,最后还是选择了Xfce,因为它比较轻量级,占用资源较少。大家也可以都试试,比较感…

外地人可以在上海当老师吗

随着社会的发展,越来越多的人涌入大城市,其中也包括上海。在这个繁华的城市里,许多人都梦想成为一名老师,但是外地人可以在上海当老师吗? 首先需要了解上海的教育政策。根据相关规定,外地人可以在上海当老师…

角色管理--产品角色负责人

研发组织管理--角色管理--产品角色负责人 定位 作为管理者,建设,管理,优化一个可控可自驱的产品经理团队,并保持对应业务领域的产品竞争力,在保证业界平均水平的基础上,不断尝试创新,争做行业…

C#实现图片背景色透明(亲测有效)

重要代码: Bitmap bm new Bitmap(origin); bm.MakeTransparent(); string Name_ "C:\\Users\\xx\\Downloads\\download\\" DateTime.Now.Ticks.ToString() ".ico";Size size new Size(256, 64);ConvertImageToIcon("C:…

视频网关简介

在数字化时代,视频通信已经成为了人们日常生活和工作中的重要部分。为了满足不同设备和平台之间的视频通信需求,各种视频协议应运而生。然而,这些协议之间的差异使得相互通信变得复杂。因此,视频网关作为一种重要的网络设备&#…

Oracle中文显示???????解决办法

项目场景: Oracleoracle中文显示???解决办法 问题描述 原因分析: Oracle中文显示???通常是由于字符集不匹配或者编码问题导致的。当数据库中的数据使用的是某种字符集,而客户端或者应用程序使用的是另一种字符集时,就会出…

解决Android端libc++_shared.so库冲突问题

前言 随着App功能增多,集成的so库也会增多,如果系统中多个so库都使用系统自动生成的libc_shared.so库,如果多个SDK都有该so包,就会出现报错: 解决办法 如果出现该问题,说明您的项目中有多个SDK共同依赖了C标…

fastjson2解析多为小数报错 TODO问题

解决方式:使用谷歌的gson可以解析多为小数

Java常见的bug

Java是一种强类型、面向对象的编程语言,有一些常见的bug或错误类型,尽管具体的bug会因项目和代码的不同而有所差异。以下是一些Java开发中常见的bug类型: 空指针异常(NullPointerException): 尝试在一个空对象上调用方法或访问属性时会引发空指针异常。这通常发生在没有对…

【双指针】有效三角形的个数

有效三角形的个数 611. 有效三角形的个数 - 力扣(LeetCode) 题目描述 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2…

MIME 类型

MIME 类型 MIME (Multipurpose Internet Mail Extensions) 是描述消息内容类型的标准,用来表示文档、文件或字节流的性质和格式。 MIME 消息能包含文本、图像、音频、视频以及其他应用程序专用的数据。 浏览器通常使用 MIME 类型(而不是文件扩展名&am…

如何编写一份优质的测试用例?

前言 这篇文章主要是想要写给测试小伙伴们的,因为我发现还是有很多小伙伴在遇到写测试用例的时候无从下手,我就想和大家简单的聊聊,分享一下我的一些见解和经验。 用例的五个构成元素: 用例标题前置条件测试步骤期望结果后置条…

05 Powershell发送http请求

一:发送http请求 1、语法: Invoke-WebRequest -uri "请求地址" -UseBasicParsing 2、实例: $result Invoke-WebRequest -uri "http://rdc.mingyuanyun.com/rdc-service/api/v2/apps/$($app)/versions/maxpackversion"…

腾讯又出王炸产品!使用混元大模型进行数据报表测试

最近腾讯出了自己的大模型,命名混元。 现在已经开始内测,感谢腾讯小伙伴卢晓明同学帮我们提前申请到了内测机会,接下来我们用腾讯混元大模型与实际工作结合,开始我的报表测试之旅。 腾讯混元大模型官方入口:https://hunyuan.ten…

Java 基础面试题大概有哪些?

Java基础面试题的范围非常广泛,一般包括以下几个方面: 一、Java基础语法 数据类型:Java中包括基本数据类型和引用数据类型,基本数据类型包括byte、short、int、long、float、double、char、boolean,引用数据类型包括…

三十分钟学会Shell(下)

Shell 3.1 运算符 3.1.1 算数运算符 在Shell脚本中,算术运算符用于执行基本的数学运算。Shell支持多种算术运算符,包括加、减、乘、除等。以下是关于Shell算术运算符的一些方法以及相应的示例说明: 加法: a10 b20 c$((a b)) …

【第二部分:结构】ARM Realm Management Monitor specification

目录 概念Realm概述Realm执行环境Realm寄存器Realm内存Realm处理器功能IMPDEF系统寄存器 Realm属性Realm活性Realm生命周期状态状态转换 Realm参数Realm描述符 颗粒Granule颗粒属性颗粒所有权颗粒生命周期状态状态转换颗粒抹除 Realm执行上下文概述REC属性REC指数和MPIDR值REC生…