探索计算之美:HTML CSS 计算器案例

本次案例是通过HTML和CSS,我们可以为计算器赋予独特的外观和功能;

在这个计算器中,你将会发现:

  • 简洁清晰的界面设计,使用户能够轻松输入和查看计算结果。
  • 利用HTML构建的结构,确保页面具有良好的可访问性和可维护性。
  • 使用CSS进行精美的样式设计,为计算器增添视觉上的吸引力。

组件:

  •  加减乘除,阶乘,(,),三角函数(tan、cos、sin),±,√×。

依赖包:angular.js  这个去官网下载

官网:AngularJS — Superheroic JavaScript MVW Framework

中文官网:AngularJS下载

下载后解压选取下图拖动到代码文件目录即可

样式:

主要代码

HTML+JS:

<html>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>计算器</title><script src="/angular.js"></script><link rel="stylesheet" href="/calc.css">
</head><body><body ng-app="zt"><div class="ys"><div ng-controller="zt-jsq"><div class="ttx"><div class="tt">计算器</div></div><div class="result"><input type="text" id="result" ng-model="result" readonly /></div><div class="keyboard-row"><button class="keyboard-button" ng-click="addToExpression('(')">(</button><button class="keyboard-button" ng-click="addToExpression(')')">)</button><button class="keyboard-button" ng-click="factorial()">n!</button><button class="keyboard-button" ng-click="clear()">C</button><button class="keyboard-button" ng-click="backspace()">←</button></div><div class="keyboard-row"><button class="keyboard-button" ng-click="appendNumber('7')">7</button><button class="keyboard-button" ng-click="appendNumber('8')">8</button><button class="keyboard-button" ng-click="appendNumber('9')">9</button><button class="keyboard-button" ng-click="appendOperator('+')">+</button><button class="keyboard-button" ng-click="appendOperator('*')">*</button></div><div class="keyboard-row"><button class="keyboard-button" ng-click="appendNumber('4')">4</button><button class="keyboard-button" ng-click="appendNumber('5')">5</button><button class="keyboard-button" ng-click="appendNumber('6')">6</button><button class="keyboard-button" ng-click="appendOperator('-')">-</button><button class="keyboard-button" ng-click="appendOperator('/')">/</button></div><div class="keyboard-row"><button class="keyboard-button" ng-click="appendNumber('1')">1</button><button class="keyboard-button" ng-click="appendNumber('2')">2</button><button class="keyboard-button" ng-click="appendNumber('3')">3</button><button class="keyboard-button" ng-click="appendNumber('0')">0</button><button class="keyboard-button1" ng-click="calculate()">=</button></div><div class="keyboard-row"><button class="keyboard-button" ng-click="zf()">±</button><button class="keyboard-button" ng-click="fz()">1/x</button><button class="keyboard-button" ng-click="pf()">x²</button><button class="keyboard-button" ng-click="gh()">√x</button></div><div class="keyboard-row"><button class="keyboard-button" ng-click="sin()">sin</button><button class="keyboard-button" ng-click="cos()">cos</button><button class="keyboard-button" ng-click="tan()">tan</button><button class="keyboard-button" ng-click="bfh()">%</button></div></div></div></body></html>
<script>// 创建模块var app = angular.module('zt', []);// 设置 zt-jsq 控制器app.controller('zt-jsq', function ($scope) {// 计算器显示屏 初始 数值为0$scope.result = '0';// 计算器显示屏上的计算公式$scope.expression = '';// 输入数值在 显示屏上$scope.appendNumber = function (number) {// 判定 公式是否为 空if ($scope.expression === '') {// 为空 输入数值$scope.expression = number;$scope.result = number;} else {// 非空 公式内容以字符串形式 拼接$scope.expression += number;// 计算器显示屏 显示 当前公式$scope.result = $scope.expression;}};// 添加 运算符$scope.appendOperator = function (operator) {// 当前 计算公式中最后一位字符var end = $scope.expression.slice(-1);// 加减乘除 符号var str = '+-/*';// 判定 计算公式 是否为空 并且 计算公式中最后一位字符 是否是 加减乘除符号if ($scope.expression === '' || str.includes(end)) {// 如果是 忽略连续的运算符return;}// 判定 计算公式是否 非空if ($scope.expression !== '') {// 非空 并 最后一位不是 加减乘除 ,添加运算符$scope.expression += operator;// 计算器显示屏 显示 当前公式$scope.result = $scope.expression;}};// 清除所有输入$scope.clear = function () {$scope.result = '0';$scope.expression = '';};// 执行 运算公式$scope.zf = function () {// 将表达式转换为数字var number = parseFloat($scope.expression);// 检查数字是否是NaN,如果是,则将表达式设置为负号if (isNaN(number)) {$scope.expression = "-";} else {// 对数字进行取反操作$scope.expression = -number;}// 更新结果为取反后的表达式$scope.result = $scope.expression;};$scope.fz = function () {if ($scope.expression.startsWith('-')) {$scope.expression = $scope.expression.slice(1);}$scope.expression = "1/(" + $scope.expression + ")";$scope.result = $scope.expression;};$scope.pf = function () {$scope.expression = "Math.pow(" + $scope.expression + ", 2)";$scope.result = $scope.expression;};$scope.gh = function () {$scope.expression = "Math.sqrt(" + $scope.expression + ")";$scope.result = $scope.expression;};$scope.bfh = function () {$scope.expression += "*0.01";$scope.result = $scope.expression;};$scope.sin = function () {$scope.expression = "Math.sin(" + $scope.expression + " * Math.PI / 180)"; // Assuming the input is in degrees$scope.result = $scope.expression;};$scope.cos = function () {$scope.expression = "Math.cos(" + $scope.expression + " * Math.PI / 180)"; // Assuming the input is in degrees$scope.result = $scope.expression;};$scope.tan = function () {$scope.expression = "Math.tan(" + $scope.expression + " * Math.PI / 180)"; // Assuming the input is in degrees$scope.result = $scope.expression;};$scope.log = function () {$scope.expression = "Math.log(" + $scope.expression + ")";$scope.result = $scope.expression;};//阶乘$scope.factorial = function () {var number = parseFloat($scope.expression);if (!isNaN(number) && number >= 0 && Math.floor(number) === number) { // 检查输入是否为非负整数var result = 1;for (var i = 2; i <= number; i++) {result *= i;}$scope.expression = result.toString();$scope.result = $scope.expression;} else {$scope.result = "Error";}};//()号$scope.addToExpression = function (value) {if ($scope.expression === '') {$scope.expression = value;$scope.result = value;} else {$scope.expression += value;$scope.result = $scope.expression;}};// 删除 最后一个字符 $scope.backspace = function () {// 判定 计算公式 当前长度是否 大于 0if ($scope.expression.length > 0) {// 大于 0 ,删除最后一位字符$scope.expression = $scope.expression.slice(0, -1);// 计算器显示屏 显示 当前公式 $scope.result = $scope.expression;} else if ($scope.result.length > 0) {// 计算器显示屏显示长度 大于0 ,当计算公式不大于0// 计算公式以运算$scope.result = '0';}};// 执行 运算公式$scope.calculate = function () {try {// 判定 计算公式 长度 是否大于 0if ($scope.expression.length > 0) {// eval -->  将 字符串 作为计算公式 进行计算// 大于0 , 执行 计算公式var calculatedResult = eval($scope.expression);// 将 计算结果 转换为 字符串$scope.result = calculatedResult.toString();// 清空 计算公式 $scope.expression = '';} else if ($scope.result.length > 0) {// 计算器显示屏显示长度 大于0 ,当计算公式不大于0// 不做操作return;}}catch (e) { // 如果表达式有误,重置结果和表达式 scope.expression = '';$scope.result = '0';$scope.expression = '';window.alert('表达式错误!');}};});
</script>
</body></html></html>

CSS样式:

.keyboard-button {width: 60px;  /* 调整为更大的尺寸 */height: 50px;font-size: 15px;background-color: #ffffff;border: 2px solid #ccc;cursor: pointer;border-radius: 5px;margin: 1px;  /* 增加按钮间隔 */justify-content: center;align-items: center;margin-top: 3px;box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);  /* 添加轻微阴影 */
}.keyboard-button:hover {background-color: #e0e0e0;
}.keyboard-button:active {background-color: #d0d0d0;
}.keyboard-button1 {width: 60px;  /* 保持与其他按钮一致 */height: 50px;font-size: 15px;background-color: #1d6978;border: 1px solid #ccc;cursor: pointer;color: #fff;margin-left: 1px;border-radius: 5px;
}.keyboard-button1:hover {background-color: #337785;
}.keyboard-button1:active {background-color:#1d6978;
}.result {width: auto;height: 40px;/* text-align: ; */border: 1px solid #ccc;border-radius: 5px;#result {width: 100%;height: 100%;border-radius: 5px;color: #000000;font-size: 25px;}
}
.ys {background-color: rgb(250, 248, 255);width: 100%;  max-width: 350px;  height: auto;display: flex;margin: 20px auto;  /* 增加上下边距以便更好的居中 */justify-content: center;border-radius: 10px;box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.2);  /* 给整体容器添加阴影 */
}
.ttx{width: 38%;background-color:  #54cbe3;border-radius: 5px;justify-content: center;
}
.tt{width: 100%;font-size: 25px;font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;color: #000000;text-align: center;display: auto;margin-bottom: 2px;
}

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

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

相关文章

【全开源】JAVA上门家政服务系统源码微信小程序+微信公众号+APP+H5

功能介绍 用户端&#xff1a;精准分类、支持家政、维修、万能服务、一口价、报价、线上、各类家政服务、优惠专区、师傅入驻、商家入驻、我的需求、补费明细、我的投诉 师傅端&#xff1a;接单池、消息通知、接单管理、今日订单、师傅入驻、我的钱包、实名认证 商家端&#…

HTTPS 原理和 TLS 握手机制

HTTPS的概述与重要性 在当今数字化时代&#xff0c;网络安全问题日益凸显&#xff0c;数据在传输过程中的安全性备受关注。HTTPS 作为一种重要的网络通信协议&#xff0c;为数据的传输提供了强有力的安全保障。它是在 HTTP 的基础上发展而来&#xff0c;通过引入数据加密机制&a…

流量分析(一)

数据库类流量分析 MySQL流量 常规操作&#xff0c;查找flag ctfhub{} 注意要选择字符集 Redis流量 查找ctfhub结果没找到 尝试把其变成十六进制继续进行查找 看到了前半段flag 接着往下看 找到了后半段的flag MongoDB流量 还是一样查找ctfhub 字符串没找到 转成十六进制也没…

c 在线教育系统论文,在线教育需要在哪些渠道做付费推广呢?

随着在网上学习的人越来越多&#xff0c;很多在线教育公司都开发了属于自己的平台。如果只做开发&#xff0c;不去做运营推广的话&#xff0c;这个在线平台就等于是白做了。那么在线教育需要在哪些渠道做付费推广呢? 1、官网广告推荐位 Banner作为一款展示型页面横幅广告&…

Spring状态机的实现原理和业务场景

Spring Statemachine 是 Spring Framework 的一部分&#xff0c;它提供了一种实现状态机的方式&#xff0c;允许开发者定义状态机的状态、事件、行为和转换。状态机是一种计算模型&#xff0c;它可以根据一系列规则从一个状态转移到另一个状态。以下 V 哥将从Spring状态机的基本…

OpenVoiceV2本地部署教程,苹果MacOs部署流程,声音响度统一,文字转语音,TTS

最近OpenVoice项目更新了V2版本&#xff0c;新的模型对于中文推理更加友好&#xff0c;音色也得到了一定的提升&#xff0c;本次分享一下如何在苹果的MacOs系统中本地部署OpenVoice的V2版本。 首先下载OpenVoiceV2的压缩包&#xff1a; OpenVoiceV2-for-mac代码和模型 https:…

Kitti数据集再识(官网阅读)

KITTI数据集中真值与标定参数 0. 前言 为了再研KITTI数据集及方便下载文件,特地买了梯子,心疼人民币QWQ~555 1. KITTI-home Welcome to the KITTI Vision Benchmark Suite! 我们利用我们的自动驾驶平台开发新颖的具有挑战性的真实世界计算机视觉基准。我们感兴趣的任务是…

interview_bak

flink内存管理 JVM 存在的几个问题: Java 对象存储密度低。一个只包含 boolean 属性的对象占用了16个字节内存:对象头占了8个,boolean 属性占了1个,对齐填充占了7个。而实际上只需要一个bit(1/8字节)就够了。Full GC 会极大地影响性能,尤其是为了处理更大数据而开了很大…

安装openssh-server,提供远程ssh

安装openssh-server&#xff0c;提供远程ssh 1.检查自己是否安装了openssh-server dpkg -l | grep ssh如果输出内容有openssh-server&#xff0c;说明已经安装过了&#xff0c;可以跳过下一步 2.安装openssh-server 由于ubuntu自带ssh客户端&#xff0c;只需要安装openssh-se…

mysql -- CRUD

CRUD MySQL是一个广泛使用的开源关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它支持通过SQL&#xff08;Structured Query Language&#xff09;语言进行数据的管理。在MySQL中&#xff0c;CRUD是一个常见的术语&#xff0c;代表了数据管理的四个基本操作&am…

图片转图标(ICO)的工具软件

目前常用的ICO转换方式大多都是网页在线转换&#xff0c;没网就无法使用了。自己编写了一款小软件&#xff0c;可以将各种格式图片转为ICO图标。 目前支持PNG,BMP,JPG,JPEG,GIF等格式的图片转换成ICO&#xff0c;支持的尺寸有常用的16*16&#xff0c;24*24&#xff0c;32*32&am…

Linux 进程间通信 System V系列: 共享内存,信号量,简单介绍消息队列

进程间通信 System V系列: 共享内存,初识信号量 一.共享内存1.引入2.原理3.系统调用接口1.shmget2.shmat和shmdt3.shmctl 4.边写代码边了解共享内存的特性1.ftok形成key,shmget创建与获取共享内存2.shm相关指令3.shmat和shmdt挂接和取消挂接4.shmctl获取共享内存信息,释放共享内…

政务网离线安装python3及其依赖手册

文章目录 python安装及环境配置gcc安装make安装python3安装pip安装 测试测试python3报错:ModuleNotFoundError: No module named _ctypes’测试pip3报错“pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.” 依赖库…

springboot 日志详解

系统用户操作日志(记录用户操作并定时保存到表中) 客户需求: 要对几个关键的业务功能进行操作日志记录&#xff0c;即什么人在什么时间操作了哪个功能&#xff0c;操作前的数据报文是什么、操作后的数据报文是什么&#xff0c;必要的时候可以一键回退。 设计思路: ruoyi中使用S…

共享旅游革命:千益畅行卡的优势揭秘

在共享经济的快速发展中&#xff0c;共享旅游创业已成为许多创新者和投资者关注的重点。特别是千益畅行&#xff0c;作为共享旅游行业的新秀&#xff0c;其商业模型和经营策略引起了市场的高度讨论。然而&#xff0c;对于这个公司是否仅仅是新一轮的市场“收割者”&#xff0c;…

Kylin Server V10下FTP服务器安全加固

一、查看操作系统信息 [root@localhost ~]# cat /etc/.kyinfo [dist] name=Kylin milestone=Server-V10-GFB-Release-ZF9_01-2204-Build03 arch=arm64 beta=False time=2023-01-09 11:04:36 dist_id=Kylin-Server-V10-GFB-Release-ZF9_01-2204-Build03-arm64-2023-01-09 11:04…

大模型prompt实例:知识库信息质量校验模块

大模型相关目录 大模型&#xff0c;包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容 从0起步&#xff0c;扬帆起航。 大模型应用向开发路径&#xff1a;AI代理工作流大模型应用开发实用开源项目汇总大模…

基于FPGA的数字信号处理(11)--定点数的舍入模式(2)向最临近值取整nearest

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式&#xff1a;向最临近值取整nearest。 10进制数的nearest nearest&#xff1a; 向最临近值方向取整。它的舍入方式和四舍五入非常类似&#xff0c;都是舍入到最近的整数…

【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用

预告 Unity开发AR系列 本专栏将介绍如何使用这个支持热更的AR开发插件&#xff0c;快速地开发AR应用。 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境

计算机视觉与深度学习实战之以Python为工具:基于主成分分析的人脸二维码识别

注意:本文的下载教程,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 下载教程:计算机视觉与深度学习实战-以MATLAB和Python为工具_基于主成分分析的人脸二维码识别_项目开发案例教程.pdf 一、引言 随着科技的快速发展,计算机视觉…