颜值超高的简单计算器(HTML+CSS+JS)

2023-11-05

 先来看一下效果吧

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            /* 设置容器尺寸 - 原理1 */
            width: 100%;
            height: 100%;
            /* 背景渐变色 - 原理2 */
            background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
            /* 背景尺寸 - 原理3 */
            background-size: 600% 600%;
            /* 循环动画 - 原理4 */
            animation: gradientBG 20s ease infinite;
        }

        /* 动画,控制背景 background-position */
        @keyframes gradientBG {
            0% {
                background-position: 0% 50%;
            }

            50% {
                background-position: 100% 50%;
            }

            100% {
                background-position: 0% 50%;
            }
        }

        .calculator {
            box-shadow: 2px 2px 11px 10px lightblue;
            margin-top: 20px;
            height: 617px;
            background-color: #efefef;
            width: 500px;
            margin: 0 auto;
        }

        .title {
            font-family: 'Courier New', Courier, monospace;
            font-size: 40px;
            text-align: center;
            width: 100%;
            margin-bottom: 20px;
        }

        .screen {
            position: relative;
            height: 100px;
            margin: 0 20px 20px 20px;
            background-color: #efefef;
            border: 2px solid #757373;
            box-shadow: -1px 3px 22px -5px #333;

        }

        .pw {
            display: flex;
        }

        .leftpw {
            display: flex;
            flex-wrap: wrap;
            height: 500px;
            width: 400px;
        }

        .rightpw {
            background-color: #efefef;
            height: 457px;
            width: 130px;
            margin-right: 20px;
        }

        .itemnum {
            height: 80px;
            width: 90px;
            background-color: #ee7752;
            margin-left: 20px;
            text-align: center;
            line-height: 80px;
            font-size: 38px;
            font-weight: 800;
            box-shadow: -1px 5px 13px -5px #333;

        }

        .pushdown {
            box-shadow: 6px 8px 13px 1px #333;
            transform: translate(-3px, -3px);
        }

        .symbol {
            width: 100%;
            height: 98px;
            /* 背景渐变色 - 原理2 */
            background: linear-gradient(-45deg, #ee7752, #e73c7e, #23a6d5, #23d5ab);
            /* 背景尺寸 - 原理3 */
            background-size: 600% 600%;
            /* 循环动画 - 原理4 */
            animation: gradientBG 20s ease infinite;
            margin-bottom: 20px;
            text-align: center;
            line-height: 98px;
            font-size: 65px;
            font-weight: 600;
            box-shadow: -1px 5px 13px -5px #333;
        }
        .input {
            float: left;
            position: absolute;
            left: 20px;
            top: 10px;
        }
        .output {
            float: right;
            position: absolute;
            bottom: 20px;
            right: 20px;
            font-size: 40px;
        }
    </style>
</head>

<body>
    <div class="title">简易计算器</div>
    <!-- 计算器的外部布局 -->
    <div class="calculator">
        <!-- 计算器的显示区域 -->
        <!-- 占位符号 -->
        <div style="height: 20px;"></div>
        <!-- 荧幕区域 -->
        <div class="screen">
            <!-- 输入区域 -->
            <div class="input"></div>
            <!-- 输出区域 -->
            <div class="output"></div>
        </div>
        <!-- 按键区域 -->
        <div class="pw">
            <!-- 左边按键区域 -->
            <div class="leftpw">
                <div class="itemnum">1</div>
                <div class="itemnum">2</div>
                <div class="itemnum">3</div>
                <div class="itemnum">4</div>
                <div class="itemnum">5</div>
                <div class="itemnum">6</div>
                <div class="itemnum">7</div>
                <div class="itemnum">8</div>
                <div class="itemnum">9</div>
                <div class="itemnum">0</div>
                <div class="itemnum" onclick="getpoint()">.</div>
                <div class="itemnum" onclick="getequals()">=</div>
            </div>
            <!-- 右边案件区域 -->
            <div class="rightpw">
                <div class="symbol">+</div>
                <div class="symbol">-</div>
                <div class="symbol">×</div>
                <div class="symbol">÷</div>
            </div>
        </div>
    </div>



</body>
<script>
    // 定义存放元素的数组,然后把元素push进去,然后用数组的join()方法来转化为字符串的操作
    var expression = []
    // 循环绑定给每个字母绑定事件,然后定时器过一段时间后去掉时间
    // 获取
    const items = document.querySelectorAll('.itemnum')
    //    items.forEach(element => {
    //         element.addEventListener('click',function () {
    //             console.log("点击到了");
    //         })
    //    });
    for (let i = 0; i < items.length; i++) {


        items[i].addEventListener('click', function () {
            // if (i + 1 == 11) {
            //     expression.push('.')
            // }
            // if (i + 1 == 12) {
            //     expression.push('=')
            // }

            //在按下按键的时候应该有一个按压的效果,按下的时候先给模糊背景,然后将元素下移动,然后定时器让一秒一后往上移,同时清楚阴影效果
            items[i].classList.add('pushdown')
            setTimeout(() => {
                items[i].classList.remove('pushdown')
            }, 700);
            if (i < 10) {
                if (i + 1 !== 10) {
                    expression.push(i + 1)
                } else {
                    expression.push(0)
                }
                console.log(expression.join(''));
                document.querySelector('.input').innerHTML = expression.join('')
            }

        })

    }
    // 获取加减乘除信号
    const symbols = document.querySelectorAll('.symbol')
    // 循环遍历添加事件
    for (let i = 0; i < symbols.length; i++) {
        symbols[i].addEventListener('click', function () {
            symbols[i].classList.add('pushdown')
            setTimeout(() => {
                symbols[i].classList.remove('pushdown')
            }, 700);
            if (symbols[i].innerHTML == '+') {
                console.log("调用了")
                expression.push('+')
                document.querySelector('.input').innerHTML = expression.join('')
            }
            if (symbols[i].innerHTML == '-') {
                console.log("调用了")
                expression.push('-')
                document.querySelector('.input').innerHTML = expression.join('')
            }
            if (symbols[i].innerHTML == '×') {
                console.log("调用了")
                expression.push('*')
                document.querySelector('.input').innerHTML = expression.join('')
            }
            if (symbols[i].innerHTML == '÷') {
                console.log("调用了")
                expression.push('/')
                document.querySelector('.input').innerHTML = expression.join('')
            }
            console.log(expression);
        })
    }
    function calculator() {

        var answer = expression.join('')
        console.log(eval(answer));
        document.querySelector('.output').innerHTML = eval(answer)
    }

    function getpoint() {
        expression.push('.')
    }
    function getequals() {
        calculator()
        expression = []
    }

</script>

</html>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

颜值超高的简单计算器(HTML+CSS+JS) 的相关文章

随机推荐

  • 随机密码生成。编写程序,在26个字母大小写和10个数字组成的列表中随机生成10个8位密码。

    随机密码生成 编写程序 在26个大小写字母和10和数字组成的列表中随机生成10个8位的密码 根据题目要求 我们编写的程序主干要有哪些内容呢 1 随机选择 2 26个大小写字母 3 10个阿拉伯数字 0 9 4 10组8位的密码 具体内容分析
  • Qt通过Http上传数据或文件

    Qt网络相关的三个主要类QNetworkAccessManager QNetworkRequest QNetworkReply 一般的使用方法就是 QNetworkRequest添加头和地址等信息 QNetworkAccessManager
  • 记录Java代码的执行时间

    方式1 public void testMenu1 M1 第一种是以毫秒为单位计算的 long startTime System currentTimeMillis 获取开始时间 Role r new Role r setId Long v
  • OSI七层参考模型之一:传输层

    大家好呀 我是请假君 今天又来和大家一起学习数通了 今天要分享的知识是OSI七层参考模型之一的传输层 传输层 Transport Layer 的功能是为会话层提供无差错的传送链路 保证两台设备间传递信息的正确无误 传输层传送的数据单位是段
  • 我们在囧途之技术管理者篇

    http blog csdn net shenyisyn article details 8350939 注 本文使用第一人称 原型取材于周围同事或民间 不代表作者本人 一到年底我就头疼 上午到了办公室刚倒了杯水 还没喝上一口 下属张XX就
  • Post请求基本步骤

    接着我的博客前后端交互来 使用Post请求完成操作 get方法从服务器获取数据 post方法向服务器提交数据 public class MainActivity extends AppCompatActivity OkHttpClient
  • SQL优化

    一 查询SQL尽量不要使用select 而是具体字段 1 反例 SELECT FROM user 2 正例 SELECT id username tel FROM user 3 理由 节省资源 减少网络开销 可能用到覆盖索引 减少回表 提高
  • jmeter java版本_Jmeter部署安装

    Jmeter安装 一 Apache Jmeter介绍 Apache JMeter是Apache组织开发的基于Java的压力测试工具 用于对软件做压力测试 它最初被设计用于Web应用测试但后来扩展到其他测试领域 它可以用于测试静态和动态资源例
  • 这样的会议让人很纠结

    很纠结吧 永远也不要参加这样的会议 顺便说一下 解决这个问题的方法就是 可用性测试 Usability Testing 好好想一想 我们做决定的时候 是要无休无止地争吵 最后谁吵赢了谁说了算呢 还是要基于真实的数据 这个变化是一场革命
  • truffle 安装以及基本指令

    1 linux下安装方式 npm install g truffle 环境要求 NodeJS 5 0 Windows Linux 或Mac OS X 2 创建工程 mkdir testdir cd testdir truffle init
  • ChatGPT 原理与核心技术介绍(自然语言处理NLP的发展与Transformer的概念)

    文章目录 1 定义 ChatGPT与自然语言处理NLP 1 1 图灵测试 1 2 建模形式 多轮历史对话原理 1 3 NLP 的发展历程 规则 gt 统计 gt 强化学习 1 4 NLP 技术的发展脉络 1 5 ChatGPT 的神经网络结
  • 巧用枚举类型来管理数据字典

    巧用枚举类型来管理数据字典 文章目录 巧用枚举类型来管理数据字典 背景 管理数据字典方法 使用接口来管理数据字典 使用数据表管理数据字典 枚举的增强使用 枚举的优化策略 第一步优化 枚举继承接口 第二步优化 增加 Bean 存枚举值 使用享
  • apache mina 学习笔记之一:mina简介和环境搭建

    Mina简介 Apache MINA Multipurpose Infrastructure for Network Applications 是 Apache 组织一个较新的项目 它为开发高性能和高可用性的网络应用程序提供了非常便利的框架
  • 腾讯云图,让数据说话

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由腾讯云数据库 TencentDB发表于云 社区专栏 一 腾讯云图 数据之美 了解腾讯云图之前 我们先来看看数据可视化 这是星云图 他表示的是QQ同时在线人数 看到这个图大家脑袋
  • SSTI 无回显绕过_带外注入

    SSTI 无回显注入 带外注入 SSTI课程推荐 重庆橙子科技 SSTI模板注入 我在这里学到了很多 配合 docker 靶场 mcc0624 flask ssti 食用效果更佳 建议各位在学习带外时先基本掌握 TCP IP 的基础知识和
  • MyBatis查询时间格式转换yyyy-MM-dd HH:mm:ss

    MyBatis查询时间格式转换yyyy MM dd HH mm ss 一 通过配置model model private Date createTime JsonFormat pattern yyyy MM dd HH mm ss priv
  • 爬虫第六课:爬取携程酒店数据

    首先打开携程所有北京的酒店http hotels ctrip com hotel beijing1 简简单单 源代码中包含我们需要的酒店数据 你以为这样就结束了 携程的这些数据这么廉价地就给我们得到了 事实并不是如此 当我们点击第二页的时候
  • 怎么使用LINQ方法来比较自定义类型对象

    LINQ提供了方便的语法和很多操作对象集合的有用的方法 但是 要让LINQ比较方法如Distinct或Intersect能正确处理 类型必须要满足一些条件 让我们看看Distinct方法 它从集合中返回所有的不重复对象 List
  • 【我的面试-前端】以下是我在参加面试过程中被问到的问题以及答案

    JavaScript 数据类型 面试中经常被问到 JavaScript 数据类型都有哪些 有些时候面试者因为紧张连这最基础的题目都回答不出来或者回答不够全面 下面我们来具体了解下 JavaScript 数据类型吧 首先 需要答出 JavaS
  • 颜值超高的简单计算器(HTML+CSS+JS)

    先来看一下效果吧