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

news2024/11/26 17:47:11

本次案例是通过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.coloradmin.cn/o/1659852.html

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

相关文章

智能评估时代:SurveyKing开源问卷系统YYDS

最近有同事在设计问卷系统&#xff0c;我碰巧在 GitHub 上发现了一个开源的问卷/考试系统&#xff0c;觉得它非常不错&#xff0c;给他推荐了下。今天我打算和家人们分享一下这个发现。 项目介绍 官方网站&#xff1a;https://surveyking.cn/ github地址&#xff1a;https://…

JavaWeb中的Session和Cookie

前言 什么是会话跟踪技术 Cookie 1.什么是cookie 2.Cookie的应用 2.1 保持用户登录状态 2.2 记录用户名 3. Cookie的设置和获取 3.1 、通过HttpServletResponse.addCookie的方式设置Cookie 3.2、浏览器中查看cookie的内容 3.3、服务端获取客户端携带的cookie&#xf…

【Golang】基于 excelize 的 Excel 工具包

目录 1. 安装excelize库2. Excel工具代码2.1 初始化Excel对象2.2. 常用操作2.2.1 设置窗格冻结2.2.2 设置工作表名称2.2.3 创建工作表2.2.4 设置单元格值2.2.5 设置单元格样式2.2.6 合并单元格2.2.7 设置行高和列宽 3.使用示例4.完整代码5.总结 在日常的开发中&#xff0c;我们…

企业必备:加密软件如何保障商业数据安全

在数字化时代&#xff0c;商业数据安全已成为企业运营中不可忽视的一环。在这个信息爆炸的时代&#xff0c;企业面临着诸多安全威胁&#xff0c;如数据泄露、黑客攻击等。因此&#xff0c;如何有效保障商业数据安全成为了每个企业都必须面对和解决的问题。而加密软件&#xff0…

免费思维13招之四:主副型思维

免费思维13招之四:主副型思维 本节,给你分享一下产品型思维的第二种子思维:主副型思维 什么是主副型思维呢?传统的主副型思维是指对企业的核心、利润最高的产品进行收费,一些附加品、延伸产品进行让利,赠送给客户。 但是这早已过时了,现在升级之后的产品型思维,就是将…

WebSocket 来单提醒和客户催单功能

一&#xff1a;WebSocket &#xff1a; WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#…

618精选好物推荐,五款品质与性价比并存的选择!

在繁忙的生活中&#xff0c;我们总是渴望找到那些能够提升生活品质的好物&#xff0c;让每一天都过得更加精彩。而618购物节&#xff0c;无疑是寻找这些好物的绝佳时机。在这个盛大的购物狂欢中&#xff0c;我们为大家精选了五款品质与性价比并存的选择&#xff0c;让大家在享受…

python使用opencv对图像的基本操作(4)

19.调整图片强度 19.1.调整强度 import numpy as np from skimage import exposure img np.array([51, 102, 153], dtypenp.uint8) matexposure.rescale_intensity(img) print(mat)注&#xff1a;skimage.exposure.rescale_intensity函数来调整img数组的亮度范围。这个函数会…

【C++】07.string详解

目录 一、为什么会有string&#xff1f; 二、string的常见接口说明 2.1 string的默认成员函数 2.1.1 默认构造函数 2.1.2析构函数 2.1.3赋值运算符 2.2迭代器介绍 2.2.1 正向迭代器 2.2.2 反向迭代器 2.3 string类对象的容量操作 2.4 string类对象的访问及遍…

django显示网页步骤

显示网页步骤 小白的django学习笔记 2024/5/6 8:30 文章目录 显示网页步骤创建输入框&#xff08;文本、单选、多选&#xff09;效果如何在django中显示网页写函数配置地址运行&#xff0c;要选择这个工程名的&#xff0c;使用socket复制ip&#xff0c;后面在加上名字,成功&…

Qexo:让你的静态博客动起来

Qexo是一个强大而美观的在线静态博客编辑器&#xff0c;它不仅限于编辑&#xff0c;而是将静态博客提升到新的高度。通过GPL3.0开源协议&#xff0c;Qexo提供了一个集编辑、管理、扩展于一体的平台&#xff0c;让静态博客也能拥有动态的元素。无论你是Hexo、Hugo还是Valaxy的用…

LeetCode 404.左叶子之和

LeetCode 404.左叶子之和 1、题目 题目链接&#xff1a;404. 左叶子之和 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别…

Linux网络编程:TCP并发服务器实现

目录 1、前言 2、多进程代码实现 2.1 创建新的进程 2.2 客户端接收响应函数 2.3 僵尸进程处理 2.4 完整代码 2.5 代码测试 3、多线程代码实现 3.1 创建新的线程 3.2 线程函数定义 3.3 完整代码 3.4 代码测试 4、总结 1、前言 前面实现了基本的TCP编程&#xf…

idea 使用 git

可以看见项目地址&#xff0c; git clone 地址 就可以拉新项目了 命令 git remote -v

水果成篮 ---- 滑动窗口

题目链接 题目&#xff1a; 分析&#xff1a; 题目中&#xff0c; 我们只能连续采摘树&#xff0c; 而且采摘的树不能超过两种&#xff0c;找到可以包含最多树的方案&#xff0c; 所以我们可以理解为&#xff1a; 找到最长的连续子数组&#xff0c; 子数组中的数据种类不大于…

TC6291C 一款电流模式升压型DC-DC转换器芯片IC

一般概述 TC6291C是一款电流模式升压型DC-DC转换器。其脉宽调制电路&#xff0c;内置0.2Ω功率场效应管使这个调节器具有高功率效率。内部补偿网络也减少了多达6个的外部元件。误差信号放大器的同相输入端连接到0.6V精密基准电压&#xff0c;内部软启动功能可以减小瞬间…

SpringBoot+logback实现日志记录写入文件

前言 在实际的开发过程中&#xff0c;日志记录有着极其重要的作用&#xff0c;它帮助我们实现更高效的故障排查与调试、更及时的监控和性能优化、更全面的业务分析与决策支持…那么我们如何在SpringBoot项目中实现日志的个性化定制&#xff0c;以满足其他特殊需求呢&#xff1f…

element ui的table多选

使用el-table的selection-change事件来获取选中的值&#xff1b; 例&#xff1a; html代码&#xff1a; <el-button type"primary" click"openTableSet">列表设置</el-button><!-- 列表设置弹框 --> <el-dialog :close-on-click-mo…

FPGA+炬力ARM实现VR视频播放器方案,3D眼镜显示

3D眼镜显示&#xff1a; FPGA炬力ARM方案&#xff0c;单个视频源信号&#xff0c;同时驱动两个LCD屏显示&#xff0c;实现3D 沉浸式播放 客户应用&#xff1a;VR视频播放器 主要功能&#xff1a; 1.支持多种格式视频文件播放 2.支持2D/3D 效果实时切换播放 3.支持TF卡/U盘文…

linux性能监控之htop

上一章节我们说了下atop&#xff0c;接下来我们说下htop&#xff0c;htop其实就是top的升级版&#xff0c;允许用户监视系统上运行的进程及其完整的命令行&#xff0c;我们还是安装下看看运行htop的效果&#xff1a; #1.查看htop是由哪个yum源提供的 [rootk8s-master ~]# yum …