angular简易计算器
说明:
用angular实现计算器效果,ui风格为暗黑
效果图:

step1: C:\Users\Administrator\WebstormProjects\untitled4\src\app\calnum\calnum.component.ts
import { Component } from '@angular/core';@Component({selector: 'app-calnum',imports: [],templateUrl: './calnum.component.html',styleUrl: './calnum.component.css'
})
export class CalnumComponent {mainDisplay = '0';subDisplay = '';currentValue = '';operator = '';firstOperand: number | null = null;handleInput(value: string): void {if (value === '.' && this.currentValue.includes('.')) return;this.currentValue = this.currentValue === '0' ? value : this.currentValue + value;this.mainDisplay = this.currentValue;}setOperator(op: string): void {if (this.currentValue === '') return;this.operator = op;this.firstOperand = parseFloat(this.currentValue);this.subDisplay = `${this.currentValue} ${op}`;this.currentValue = '';}calculate(): void {if (!this.firstOperand || !this.operator) return;const secondOperand = parseFloat(this.currentValue);let result: number;switch (this.operator) {case '+':result = this.firstOperand + secondOperand;break;case '-':result = this.firstOperand - secondOperand;break;case '×':result = this.firstOperand * secondOperand;break;case '÷':result = this.firstOperand / secondOperand;break;default:return;}this.mainDisplay = result.toString();this.subDisplay = `${this.firstOperand} ${this.operator} ${secondOperand} =`;this.currentValue = result.toString();this.firstOperand = null;this.operator = '';}clear(): void {this.mainDisplay = '0';this.subDisplay = '';this.currentValue = '';this.firstOperand = null;this.operator = '';}}
step2: C:\Users\Administrator\WebstormProjects\untitled4\src\app\calnum\calnum.component.html
<div class="calculator"><div class="display"><div class="sub-display">{{ subDisplay }}</div><div class="main-display">{{ mainDisplay }}</div></div><div class="buttons"><button (click)="clear()">AC</button><button (click)="handleInput('7')">7</button><button (click)="handleInput('8')">8</button><button (click)="handleInput('9')">9</button><button class="operator" (click)="setOperator('÷')">÷</button><button (click)="handleInput('4')">4</button><button (click)="handleInput('5')">5</button><button (click)="handleInput('6')">6</button><button class="operator" (click)="setOperator('×')">×</button><button (click)="handleInput('1')">1</button><button (click)="handleInput('2')">2</button><button (click)="handleInput('3')">3</button><button class="operator" (click)="setOperator('-')">-</button><button (click)="handleInput('0')">0</button><button (click)="handleInput('.')">.</button><button (click)="calculate()">=</button><button class="operator" (click)="setOperator('+')">+</button></div>
</div>
step3: C:\Users\Administrator\WebstormProjects\untitled4\src\app\calnum\calnum.component.css
/* calculator.component.css */
.calculator {background: #1a1a1a;border-radius: 16px;padding: 24px;width: 320px;box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3);border: 1px solid #333;margin: 20px auto;
}.display {background: #000;border-radius: 12px;padding: 20px;margin-bottom: 20px;text-align: right;border: 1px solid #333;
}.sub-display {color: #666;font-size: 14px;min-height: 20px;margin-bottom: 8px;font-family: 'Courier New', monospace;
}.main-display {color: #fff;font-size: 36px;font-weight: 300;letter-spacing: -1px;font-family: 'Segoe UI', sans-serif;
}.buttons {display: grid;grid-template-columns: repeat(4, 1fr);gap: 8px;
}button {border: none;border-radius: 8px;padding: 18px;font-size: 20px;cursor: pointer;transition: all 0.15s ease;background: #2d2d2d;color: #fff;font-weight: 500;
}button:hover {background: #3d3d3d;transform: translateY(-1px);
}button:active {transform: translateY(1px);
}button.operator {background: #ff9500;color: #fff;
}button.operator:hover {background: #ffaa33;
}button:nth-child(1) { /* AC 按钮 */background: #ff3b30;color: #fff;
}button:nth-child(1):hover {background: #ff453a;
}button:nth-child(19) { /* = 按钮 */background: #34c759;color: #fff;grid-column: span 2;
}button:nth-child(19):hover {background: #30d158;
}/* 数字按钮特殊效果 */
button:not(.operator):not(:first-child):not(:last-child) {background: #262626;
}/* 按钮文字阴影 */
button {text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);
}/* 输入动画 */
button {transition:background 0.2s ease,transform 0.1s cubic-bezier(0.4, 0, 0.2, 1),box-shadow 0.2s ease;
}/* 键盘聚焦效果 */
button:focus-visible {outline: 2px solid #007AFF;outline-offset: 2px;
}/* 显示区域渐变效果 */
.display {background: linear-gradient(145deg, #0a0a0a, #000);
}/* 操作符按钮激活状态 */
button.operator.active {background: #ffaa33;box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.2);
}
end
相关文章:
angular简易计算器
说明: 用angular实现计算器效果,ui风格为暗黑 效果图: step1: C:\Users\Administrator\WebstormProjects\untitled4\src\app\calnum\calnum.component.ts import { Component } from angular/core;Component({selector: app-calnum,import…...
谈谈 ES 6.8 到 7.10 的功能变迁(3)- 查询方法篇
上一篇咱们了解了 ES 7.10 相较于 ES 6.8 新增的字段类型,这一篇我们继续了解新增的查询方法。 Interval 间隔查询: 功能介绍 Interval 查询,词项间距查询,可以根据匹配词项的顺序、间距和接近度对文档进行排名。主要解决的查询…...
16、Python面试题解析:python中的浅拷贝和深拷贝
在 Python 中,浅拷贝(Shallow Copy) 和 深拷贝(Deep Copy) 是处理对象复制的两种重要机制,它们的区别主要体现在对嵌套对象的处理方式上。以下是详细解析: 1. 浅拷贝(Shallow Copy&a…...
游戏引擎学习第119天
仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾和今天的议程 如果你们还记得昨天的进展,我们刚刚完成了优化工作,目标是让某个程序能够尽可能快速地运行。我觉得现在可以说它已经快速运行了。虽然可能还没有达到最快的速度,但我们…...
爬虫解析库:Beautiful Soup的详细使用
文章目录 1. 安装 Beautiful Soup2. 基本用法3. 选择元素4. 提取数据5. 遍历元素6. 修改元素7. 搜索元素8. 结合 requests 使用9. 示例:抓取并解析网页10. 注意事项 Beautiful Soup 是一个用于解析 HTML 和 XML 文档的 Python 库,它提供了简单易用的 API…...
OpenHarmony-4.基于dayu800 GPIO 实践(2)
基于dayu800 GPIO 进行开发 1.DAYU800开发板硬件接口 LicheePi 4A 板载 2x10pin 插针,其中有 16 个原生 IO,包括 6 个普通 IO,3 对串口,一个 SPI。TH1520 SOC 具有4个GPIO bank,每个bank最大有32个IO: …...
【C++设计模式】观察者模式(1/2):从基础到优化实现
1. 引言 在 C 软件与设计系列课程中,观察者模式是一个重要的设计模式。本系列课程旨在深入探讨该模式的实现与优化。在之前的课程里,我们已对观察者模式有了初步认识,本次将在前两次课程的基础上,进一步深入研究,着重…...
《机器学习数学基础》补充资料:欧几里得空间的推广
在《机器学习数学基础》第 1 章介绍了向量空间,并且说明了机器学习问题通常是在欧几里得空间。然而,随着机器学习技术的发展,特别是 AI 技术开始应用于科学研究中,必然会涉及到其他类型的空间。本文即在《机器学习数学基础》一书所…...
在配置PX4中出现的问题2
想要原教程的请看:第一次配置中出现的问题 前面一切正常(gazebo导入models那一步在刚刚解压好的文件夹里就删不掉stereo_camera等文件,ls打开也看不到,应该时我下的包里面本来就没有),到 make px4_sitl_def…...
2025-2-24-4.9 单调栈与单调队列(基础题)
文章目录 4.9 单调栈与单调队列(基础题)单调栈739. 每日温度42. 接雨水单调队列239. 滑动窗口最大值 4.9 单调栈与单调队列(基础题) 很有趣的两个数据结构。 原视频讲解链接 单调栈 739. 每日温度 题目链接 给定一个整数数组 te…...
python绘图之swarmplot分布散点图
swarmplot 是 Seaborn 提供的一种用于展示分类数据分布的散点图。它的主要作用是将数据点按照分类变量(通常是离散变量)进行分组,并在每个分类中以一种非重叠的方式展示数据点的位置。这种可视化方式可以帮助我们直观地理解数据在不同分类下的…...
数据库之MySQL——事务(一)
1、MySQL之事务的四大特性(ACID)? 原子性(atomicity):一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操…...
Linux学习笔记之文件
1.文件 1.1文件属性 当我们创建文件时,文件就有了对应的属性,可以用mkdir创建目录,touch创建普通文件。用ls -al查看文件属性。 从上图可以看出目录或者文件的所有者,所属组,其他人权限,创建时间等信息。由…...
LLM学习
1、基础概念篇 大模型训练三部曲Pretraining SFT RLHF...
Classic Control Theory | 13 Complex Poles or Zeros (第13课笔记-中文版)
笔记链接:https://m.tb.cn/h.TtdexbP?tkeFAlejKBSzQhttps://m.tb.cn/h.TtdexbP?tkeFAlejKBSzQ...
给小米/红米手机root(工具基本为官方工具)——KernelSU篇
目录 前言准备工作下载刷机包xiaomirom下载刷机包【适用于MIUI和hyperOS】“hyper更新”微信小程序【只适用于hyperOS】 下载KernelSU刷机所需程序和驱动文件 开始刷机设置手机第一种刷机方式【KMI】推荐提取boot或init_boot分区 第二种刷机方式【GKI】不推荐 结语 前言 刷机需…...
【MySQL】表的增删查改(CRUD)(上)
个人主页:♡喜欢做梦 欢迎 👍点赞 ➕关注 ❤️收藏 💬评论 CRUD:Create(新增数据)、Retrieve(查询数据)、Update(修改数据)、Delete(修改数据…...
测试用例的Story是什么?
测试用例的 Story(用户故事)是指描述某个功能或场景的具体用户需求,它通常以简短的业务背景用户操作期望结果的方式呈现,使测试人员能够理解测试的目标和价值。用户故事能够帮助团队更好地设计测试用例,确保功能满足用…...
15.4 FAISS 向量数据库实战:构建毫秒级响应的智能销售问答系统
FAISS 向量数据库实战:构建毫秒级响应的智能销售问答系统 关键词:FAISS 向量数据库、销售知识库构建、相似度检索优化、大规模问答匹配、量化索引技术 1. 销售问答场景的向量化挑战与解决方案 1.1 传统检索方案痛点分析 #mermaid-svg-AeVgih79asJb7lb8 {font-family:"…...
Golang笔记——Interface类型
大家好,这里是,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的interface数据结构类型,包括基本实现和使用等。 文章目录 Go 语言中的 interface 详解接口定义实现接口空接口 interface{} 示例&…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
NPOI Excel用OLE对象的形式插入文件附件以及插入图片
static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南
在RK3588上搭建ROS1环境:创建节点与数据可视化实战指南 背景介绍完整操作步骤1. 创建Docker容器环境2. 验证GUI显示功能3. 安装ROS Noetic4. 配置环境变量5. 创建ROS节点(小球运动模拟)6. 配置RVIZ默认视图7. 创建启动脚本8. 运行可视化系统效果展示与交互技术解析ROS节点通…...
