探索计算之美: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 () {
            // 判定 计算公式 当前长度是否 大于 0
            if ($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 {
                // 判定 计算公式 长度 是否大于 0
                if ($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.mfbz.cn/a/612632.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

gitee 简易使用 上传文件

Wiki - Gitee.com 官方教程 1.gitee 注册帐号 2.下载git 安装 http://git-scm.com/downloads 3. 桌面 鼠标右键 或是开始菜单 open git bash here 输入&#xff08;复制 &#xff0c;粘贴&#xff09; 运行完成后 刷新网页 下方加号即可以添加文件 上传文件 下载 教程…

前端崽的java study笔记

文章目录 basic1、sprint boot概述2、sprint boot入门3、yml 配置信息书写和获取 basic 1、sprint boot概述 sprint boot特性&#xff1a; 起步依赖&#xff08;maven坐标&#xff09;&#xff1a;解决配置繁琐的问题&#xff0c;只需要引入sprint boot起步依赖的坐标就行 自动…

【敦煌网注册/登录安全分析报告】

敦煌网注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大…

基于STM32移植lvgl(V8.2)(SPI接口的LCD)

目录 概述 1 认识LVGL 1.1 LVGL官网 1.2 LVGL库文件下载 2 认识SPI接口型LCD 2.1 PIN引脚定义 2.2 MCU IO与LCD PIN对应关系 3 实现LCD驱动 3.1 使用STM32Cube配置Project 3.2 STM32Cube生成工程 4 移植LVGL 4.1 准备移植文件 4.2 添加lvgl库文件到项目 4.2.1 src下…

工作中使用Optional过滤出符合条件的数据

工作中使用Optional获取非空对象的属性 实体类Optional对非空对象的处理满足过滤条件返回的值不满足条件返回的值 实体类 package po;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import java.io.Serializable;Data AllArgsConst…

stm32开发三、GPIO

部分引脚可容忍5V&#xff0c;容忍5V的意思是:可以在这个端口输入5V的电压&#xff0c;也认为是高电平 但是对于输出而言&#xff0c;最大就只能输出3.3V&#xff0c;因为供电就只有3.3V 具体哪些端口能容忍5V&#xff0c;可以参考一下STM32的引脚定义 不带FT的&#xff0c;就只…

MobileNet 网络详解

一、了解 网络亮点&#xff1a; 1、DW网络&#xff0c;大大减少运算量和参数数量 2、增加超参数&#xff1a;控制卷积层卷积核个数的超参数 &#xff0c;控制图像输入大小的超参数 &#xff0c;这两个超参数是人为设定的&#xff0c;不是机器学习到的。 二、DW卷积&#xff…

湖仓一体 - Apache Arrow的那些事

湖仓一体 - Apache Arrow的那些事 Arrow是高性能列式内存格式标准。它的优势&#xff1a;高效计算&#xff1a;所有列存的通用优势&#xff0c;CPU缓存友好、SIMD向量化计算友好等&#xff1b;零序列化/反序列化&#xff1a;arrow的任何数据结构都是一段连续的内存&#xff0c;…

深入学习指针3

目录 前言 1.二级指针 2.指针数组 3.指针数组模拟二维数组 前言 Hello,小伙伴们我又来了&#xff0c;上期我们讲到了数组名的理解&#xff0c;指针与数组的关系等知识&#xff0c;那今天我们就继续深入到学习指针域数组的练联系&#xff0c;如果喜欢作者菌生产的内容还望不…

### 【数据结构】线性表--顺序表(二)

文章目录 1、什么是线性表2、线性表的基本操作3、顺序表3.1、顺序表的定义3.2、顺序表的实现方式&#xff1a;静态分配3.3、顺序表的实现方式&#xff1a;动态分配3.4、顺序表的特点3.5、顺序表的初始化与插入操作3.6、顺序表的删除与查询 1、什么是线性表 ​ 线性表是具有相同…

MyBatis——使用MyBatis完成CRUD

CRUD&#xff1a;Create Retrieve Update Delete 1、insert <insert id"insertCar">insert into t_car(id,car_num,brand,guide_price,produce_time,car_type)values(null,1003,五菱宏光,30.0,2020-09-18,燃油车); </insert> 这样写显然是写死的&#…

AI办公自动化:用kimi批量新建Word文档

Excel文件中有43行内容&#xff0c;希望根据这些内容批量新建43个word文档。 在kimichat中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个编写批量新建Word文档Python脚本的任务&#xff0c;具体步骤如下&#xff1a; 打开F盘的表格文件&#xff1a;工…

node.js学习笔记

读取命令行参数 安转minimist&#xff08;轻量级的命令行参数解析引擎&#xff09; npm install --save minimist js文件 const minimist require("minimist");const args minimist(process.argv.slice(2));console.log(args["id"]) package.json {…

2024年汉字小达人活动还有4个多月开赛:来做18道历年选择题备考吧

不出特殊情况的话&#xff0c;距离2024年第11届汉字小达人比赛还有4个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。②把历年真题刷刷熟…

1689 ssm社区老人危机干预系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java ssm社区老人危机干预系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主…

Reactor Netty UDP 客户器端-响应式编程-017

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…

玩游戏专用远程控制软件

玩游戏专用远程控制软件&#xff1a;实现远程游戏的新体验 随着网络技术的不断发展和创新&#xff0c;远程控制软件已经逐渐渗透到我们生活的方方面面&#xff0c;尤其是在游戏领域。玩游戏专用远程控制软件&#xff0c;作为这一趋势下的产物&#xff0c;为玩家提供了全新的游…

CentOS 7安装配置docker

CentOS 7、8安装、配置docker 这里宿主机的型号选择是centos7.9.2009的版本 1.宿主机关闭防火墙和selinux&#xff0c;配置ipv4 #设置SELinuxdisabled vim /etc/selinux/config SELinuxdisabled 查看防火墙状态&#xff1a;firewall-cmd --state 关闭防火墙&#xff1a;syst…

【智能算法】正切搜索算法(TSA)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2022年&#xff0c;A Layeb受到正切函数启发&#xff0c;提出了正切搜索算法&#xff08;Tangent Search Algorithm, TSA&#xff09;。 2.算法原理 2.1算法思想 TSAT基于正切函数的数学…

【YashanDB知识库】ycm托管数据库时报错OM host ip:127.0.0.1 is not support join to YCM

问题现象 问题的风险及影响 导致数据库无法托管监控 问题影响的版本 问题发生原因 安装数据库时修改了OM的监听ip为127.0.0.1 解决方法及规避方式 后台修改OM的ip为本机的ip或者0.0.0.0 问题分析和处理过程 1、修改env文件中的om IP地址&#xff0c;修改为0.0.0.0或本机…