使用html+css+javaScript 完成计算器

简介: 使用html+css+javaScript 完成计算器

一、先用html与css搭建骨架

思路:

  1. 将计算器的数字按钮放进一个表格里,
  2. 再通过css修饰
  3. 然后对指定的数字按钮或功能按钮添加事件
  4. 将需要计算的式子放进一个字符串里,最后==通过全局方法eval( )计算==出来
html的骨架搭建
//这里的用一个 div 将内容包住, 然后再align="center" 将计算机居中
<div align="center">
    <div class="main_div">
        <div class="top_div">wswsjwq的计算器</div>
        <textarea id="main_div_area" cols="35px" rows="3px"></textarea>
        <table class="mian_div_table" cellpadding="0" cellspacing="10">
            <tr>
                <td class="cell_nub">7</td>
                <td class="cell_nub">8</td>
                <td class="cell_nub">9</td>
                <td class="cell_nub">+</td>
            </tr>
            <tr>
                <td class="cell_nub">4</td>
                <td class="cell_nub">5</td>
                <td class="cell_nub">6</td>
                <td class="cell_nub">-</td>
            </tr>
            <tr>
                <td class="cell_nub">1</td>
                <td class="cell_nub">2</td>
                <td class="cell_nub">3</td>
                <td class="cell_nub">*</td>
            </tr>
            <tr>
                <td class="cell_nub">0</td>
                //使用onclick="函数()" 添加点击事件
                <td onclick="clearArea()">C</td>
                <td onclick="sum()">=</td>
                <td class="cell_nub">/</td>
            </tr>
        </table>
    </div>
</div>

效果:
在这里插入图片描述

css点缀修饰
        <style type="text/css">
            .main_div {
                width: 500px;
                height: 350px;
                background-color: #F0F8FF;
            }
            .top_div {
                height: 50px;
                line-height: 50px;
                background-color: #DFE9F5;
                font-weight: bold;
                font-size: x-large;
                font-family: "宋体";
            }
            .mian_div_table {
                 width: 500px;
                 height: 150px;
            }
            .mian_div_table td {
                padding-left: 40px;
                font-size: 30px;
                background-color: #A9A9A9;
            }
            #main_div_area {
                font-size: xx-large;
            }
        </style>

效果:
在这里插入图片描述
最后的大头javaScript:

    <script type="text/javascript">
        // 获取到每个数字按键的document对象
        var Btn = document.getElementsByClassName("cell_nub");
        //获取文本域对象,***注意此处只能使用id来获取文本域对象***
        var areaObj = document.getElementById("main_div_area");
        //定义一个字符串来接收输入内容
        var Str = "";
        var arr = [];
        //给同一个类添加事件
        for (var i = 0; i < Btn.length; i++) {
          arr.push(i);
          arr.forEach((value) => {
            Btn[value].onclick = function () {
                //打印出按压结果以便观看
              console.log("按压值: "+Btn[value].innerHTML);
              //将值传给拼接字符串的方法add()
              add(Btn[value].innerHTML);
            };
          });
        }
        
        //字符串拼接方法
        function add(temp){
            console.log("拼接字符串方法执行");
            console.log(Str.charAt(Str.length-1));
            //如果此时的按压值是+-*/与上一个字符重复,就要覆盖上一次的符号
            if((Str.charAt(Str.length-1)=="+"||Str.charAt(Str.length-1)=="-"||Str.charAt(Str.length-1)=="*")&&(temp=="+"||temp=="-"||temp=="*"||temp=="/")){
                console.log("此时的按压值 :"+temp);
                //截取0到最后一个,不包括最后一个
                Str=Str.substring(0,Str.length-1);
                console.log("删除重复符号后"+Str);
                Str+=temp;
                console.log("添加后"+Str);
            }else{
                Str+=temp;
            }
            areaObj.value = Str;
            console.log("字符串Str="+Str);
        }
        //使用eval()求和的方法
        function sum(){
            console.log("求和方法执行");
            console.log("结果是: "+eval(Str));
            areaObj.value = eval(Str);
        }
        //清除的方法
        function clearArea(){
            console.log("清除方法执行");
            Str="";
            console.log("清除后"+Str);
            areaObj.value = Str;
        }
    </script>

==当我写javaScript时候遇到的问题;==

  1. 就是获取文本域的标签对象(也叫文本域的DOM对象)时候,我给那个文本域标签使用class命名,获取DOM对象时候,无法修改文本域里的内容

如图:
!在这里插入图片描述](https://img-bog.csdnimg.cn/337c4c6992f546a0b84a2c708af23e93)

在这里插入图片描述](https://ucc.alicdn.com/images/user-upload-01/735d8acd535e4217afe31c91e6b24476.png)

点击数字按键并不能将按键的内容放到文本域里

  1. 在我想将获取的计算式子放到文本域时候老想着使用
areaObj.innerHTML = "我是获取的按钮值";

这样无法获取到,因为文本域标签时功能性标签,并不是想div那样的包裹标签,
所以应该用value

areaObj.value = "我是获取的按钮值";
  1. 还要再注意一下给一类标签添加事件的代码块
            var arr = [];
            //用for循环给获取的一组类标签加事件
        for (var i = 0; i < Btn.length; i++) {
          arr.push(i);
          arr.forEach((value) => {
            Btn[value].onclick = function () {
                //打印出按压结果以便观看
              console.log("按压值: "+Btn[value].innerHTML);
              //将值传给拼接字符串的方法add()
              add(Btn[value].innerHTML);
            };
          });
        }

如果foreach忘记的兄弟们 [点这里]

  1. 还有一点

如果要在javaScript里获取对象, 那就要写在body的后面

这是由于脚本语言是从上向下加载顺序有关

若有错误, 及时提出,作者秒回

相关文章
|
12月前
|
开发框架 JavaScript 前端开发
精选HTML、JavaScript、ASP代码片段集锦
这些代码片段代表了HTML, JavaScript和ASP的基本应用,可被集成到更复杂的项目中。它们注重实用性,并且易于理解,旨在帮助开发者快速开始项目构建或进行学习。尽管ASP不如其他服务器端技术(如Node.js, PHP, Ruby等)现代,但它在遗留系统中仍非常普遍,了解基础仍具有价值。
391 14
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
815 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
1255 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
315 34
|
前端开发 JavaScript UED
前端开发的魔法:CSS动画与JavaScript的完美结合
本文将探讨如何利用CSS动画和JavaScript的结合,为前端页面增添生动的效果。我们将通过实例展示如何使用这两种技术为网页元素创建吸引人的动画效果,并讨论它们的优缺点和适用场景。
|
Web App开发 编解码 前端开发
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
556 0
浏览器原理 23 # 分层和合成机制:为什么CSS动画比JavaScript高效?
|
Web App开发 移动开发 前端开发
梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能。
梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画
|
JavaScript 前端开发 UED
为什么 CSS 动画比 JavaScript 高效?
为什么 CSS 动画比 JavaScript 高效?
266 0
为什么 CSS 动画比 JavaScript 高效?