javascript从0到0.9手写一个windows计算器

55 篇文章 28 订阅
订阅专栏

        说实话,最初想用javascript模拟着windows的计算器写一个的时候,感觉也就是10分钟搞定,但写着写着发现,其实并不是那么容易的事,window的这个计算器逻辑挺多的。

        而且还想给别人把这个思路说出来,那就更加的不容易了。

        这个window的计算器呢,简直是颠覆了我们小学的那点知识,我们总认为计算嘛, 1 + 1 = 2 , 必须得有第一个加数,再有一个加数,2个数相加才能等于一个数,但windows计算器可以不点击第二个加数,直接往下加。

        难倒是不难,但对于初学者来说 +=  赋值  显示内容 最终值累算这些内容都是要学的。

        希望本文可以以一个废话多,代码清晰,逻辑通顺的角度帮助大家。

        如果能够帮到一些人,那将会是我莫大的欣慰。

代码开始前 ,跟我做:

》》》》 windows徽标键 + R  ,会出现一个运行小窗口

 》》》》  输入框内输入 calc   然后出现了计算器

 太复杂的今天不做啊,今天只做0 - 9的数字 加  减  乘  除  清空  等于 

目录

一、HTML布局

1、包含的内容

2、html中的元素布局

二、CSS样式控制

三、计算器需求预备

1、计算器的乱套的逻辑

2、逻辑分析

3、初始化代码

3、按钮点击事件循环

四、计算过程

1、存储和显示第一个数字

2、点击加号的逻辑

3、存储和显示第2个数字

4、等号的逻辑

5、其他符号


一、HTML布局

1、包含的内容

        根据计算器的按键分布,包含 7 8 9 4 5 6 1 2 3 0  然后有一个C表示清空,有 + - × ÷ =  5个操作按钮

        顶部包含显示屏,第一行显示一直计算的数值,

        第二行表示当前按下的数值,当按下 = 的时候,第二行显示屏有会显示当前计算的结果值

2、html中的元素布局

        id为valueDom1 的 div元素,用来做为顶部第一行显示屏,表示计算过程

        id为valueDom2 的 div元素,用来做为顶部第二行显示屏,表示当前点击数值,也表示点击等号后的运算结果

<div class="count-box">
   <div class="count-runing" id="valueDom1"></div>
   <div class="count-current" id="valueDom2"></div>
   <div class="count-btns">
      <div>7</div>
      <div>8</div>
      <div>9</div>
      <div>+</div>
      <div>4</div>
      <div>5</div>
      <div>6</div>
      <div>-</div>
      <div>1</div>
      <div>2</div>
      <div>3</div>
      <div>×</div>
      <div>0</div>
      <div class="clear">C</div>
      <div class="equal">=</div>
      <div>÷</div>
   </div>
</div>

        

二、CSS样式控制

<style>
    html, body, * {
       margin: 0;
       padding: 0;
    }
    .count-box {
       margin: 100px;
       width: 289px;
       height: 280px;
       background: #CCC;
    }
    .count-runing {
       height: 36px;
       line-height: 36px;
       text-align: right;
       font-size: 16px;
    }
    .count-current {
       height: 36px;
       line-height: 36px;
       text-align: right;
       font-size: 24px;
    }
    .count-btns {
       background: #FFF;
       display: flex;
       flex-wrap: wrap;
    }
    .count-btns div {
       width: 70px;
       height: 50px;
       border: 1px solid #CCC;
       cursor: pointer;
       text-align: center;
       line-height: 50px;
    }
    .clear {
       background: blue;
    }
    .equal {
        background: red;
    }
</style>

   到这一步,可以看到一个简单的计算器雏形了。

三、计算器需求预备

1、计算器的乱套的逻辑

        按照windows显示器一起点一点,体验一下需求

        △  初始化显示0

        △ 点数字,会显示到第二行显示屏(我们在上面定义过显示屏的感念)上,可以点1位数字,也可以点多位,都会显示到第二块显示屏上

        △ 可以点 + - × ÷ 任意一个按钮,点完之后会把第一个数值 和 符号显示到 第一行显示屏上,例如 55 + 

        △ 接下来就是比较颠覆我们小学知识的操作,上过小学的都知道, 1 + 1 = 2  但是这个windows显示器呢,你可以 1 + = ,结果会是2

        △ 结果这个2呢,会显示到第二行的显示屏上,第一行显示屏现在显示的是 1 + 1 =  ,如下图

        △ 以此类推,+ - × ÷ 都是这么个操作过程

        △ 比如先点2, 再点+,再点6, 再点符号,相当于点了=号,

        △ 好乱套

2、逻辑分析

        ☆ 第一行显示屏,由于是一个字符串,所以只能用来显示,万万不可用来参与计算

        ☆ 第二行显示屏,也是用来显示用的,我们每点击一下按钮,符号,还是数字都应该存在一个变量里

        ☆ 准备一个变量,resultNum 用来存储每次的最终得值

        ☆ 准备一个变量,firstNum 用来存储每次计算符号前面的数值, 比如 11 + 25  =  这个里面的11 这个值

        ☆ 准备一个变量,lastDo 用来存储每次点击的运算符号,也就是 + - × ÷ ,没点击一次运算符号,把lastDo的值更新一次,保证每次运算的符号是最后一次点击的那个符号

        ☆ 准备一个变量,secondNum 用来存储每次计算符号后面的数值,比如11 + 25 = 这个里面的25这个值

3、初始化代码

代码中已经添加了注释,这里就不细说了

<script>
   // 这是第一行显示屏
   var value1Dom = document.querySelector('#valueDom1');
   // 这是第二行显示屏
   var value2Dom = document.querySelector('#valueDom2');
   // 这是所有的按钮 + - × ÷ = C
   var btns = document.querySelectorAll('.count-btns div');
   // 初始化的时候第二行显示屏显示0
   value2Dom.innerText = 0;
   // 定义每次计算结果值
   var resultNum = 0;
   // 定义每次点击的运算符号
   var lastDo = '';
   // 定义计算过程中第1个值
   var firstNum = 0;
   // 定义计算过程中第2个值
   var secondNum = 0;
</script>

3、按钮点击事件循环

// 开始对按钮进行循环遍历
for (var i=0;i<btns.length;i++) {
    // 给每个按钮添加点击事件
    btns[i].onclick = function() {
       // 获取点击按钮的内容值 例如数字 或是符号
       var value = this.innerText;
       switch(value) {
         case '+':
                 
               break;
         case '-':
               
               break;
         case '×':
               
               break;
         case '÷':
               
               break;
         case 'C':
                          
               break;
         case '=':
                           
               break;
         default:
                  
     }
}

四、计算过程

1、存储和显示第一个数字

        我们刚才说过,第二行显示屏只是用于显示,而真正需要计算的数值需要存储在firstNum中。这个如何实现呢,数字可以一直按,按一个5就是5,按一个5按一个8就是58.所以,只要我们检测到,只要是lastDo没有被存储过计算符号,都算是第一个数字

// 开始对按钮进行循环遍历
for (var i=0;i<btns.length;i++) {
    // 给每个按钮添加点击事件
    btns[i].onclick = function() {
       // 获取点击按钮的内容值 例如数字 或是符号
       var value = this.innerText;
       switch(value) {
         case '+':
               lastDo = value; // 这里存储的 + 
               break;
         case '-':
               lastDo = value; // 这里存储的 - 
               break;
         case '×':
               lastDo = value; // 这里存储的 ×
               break;
         case '÷':
               lastDo = value; // 这里存储的 ÷ 
               break;
         case 'C':
               lastDo = ''; // 点击清空的时候,清空所有
               value1Dom.innerText = ''; // 第一行显示屏
               value2Dom.innerText = 0; // 第二行显示屏归0
               resultNum = 0; // 最终计算值清零
               firstNum = 0; // 第一个计算值清零
               secondNum = 0; // 第二个计算值清零
               break;
         case '=':
                        
               break;
         default:
                  
     }
}

        从这段代码可知,没点击一下计算符号,点的是 + ,就把lastDo赋值为+ ,点的是 × ,就为lastDo 赋值为  ×, 一旦点击了按钮C,清空一切。那么就开始给第一个firstNum赋值

        刚才说过只要不点击4个运算符号,点击的就是第一个数字

        所以这里的代码应该写到default分支里,这里接收的是点击数字的值

// default分支接收点击数字
default:
    // 只要没有lastDo 就证明在点击第1个数值
    if (!lastDo) {
         // 这次这里过来的value数字是字符串类型的
         // 字符串类型的会向后追加,不是相加
         firstNum += value;
         // 为了便于后续相加计算,将firstNum转为数值型
         firstNum = Number(firstNum);
         // 从第一个值开始点,就已经要给resultNum赋值了
         // 这个resultNum就是实时得到最终结果的那个值
         resultNum = firstNum;
         // 将追加的内容显示在第二行显示屏上
         value2Dom.innerText = firstNum;
    } 

        输入一个234试试,如下图:

2、点击加号的逻辑

        一旦点击了加号,第一行显示屏就会有所变化,因为第一行显示屏是要显示实时的计算过程的。例如刚刚点击的234,这时点了+号,第一行显示屏就会 显示 234 + 

        所以这段代码应该写到 case '+':的分支处

        既然都说了显示屏只用来显示,为什么这里要一直拿着resultNum进行显示呢,因为在windows计算器中,中间的运算符号是加号,第一行就要显示加号,如果又点击了减号,这里就要再显示减号

case '+':
    lastDo = value;
    // 因为resultNum在最开始点击就参与了计算
    // 保证这里可以在第一行显示完整
    value1Dom.innerText = resultNum + value;
    break;

3、存储和显示第2个数字

        既然刚才说运算符号前面的都算第1个数字,那么运算符号后面的就算第2个数字呗。逻辑和第1个数字差不多

        这里需要修改刚刚的default分支的逻辑代码

default:
    if (!lastDo) {
        firstNum += value;
        firstNum = Number(firstNum);
        resultNum = firstNum;
        value2Dom.innerText = firstNum;
     } else {
        secondNum += value;
        secondNum = Number(secondNum);
        value2Dom.innerText = secondNum;
     }

4、等号的逻辑

        最初的需求分析中说过,如果点了第一个数字,再点加号,那么如果再直接点等号,就是 

        resultNum += firstNum 的逻辑

        如果点了加号,再点第二个数字,那么就是

        resultNum = firstNum + secondNum 的逻辑,但是刚才说过,其实从点击第一个数字开始的时候,就开始不断通过firstNum给resultNum累加值了,所以其实可以写成

        resultNum += secondNum 的逻辑

        所以这里的代码应该写在case '=' 的分支处

case '=':
     // 因为是计算,检测到没有运算符号不能计算
     if (!lastDo) {
        // break 就是停止继续执行代码的意思
        return;
     }
     // 当判断最后一次点击的运算发号是加号,
     // 后续还可以继续做else判断,或者继续用switch case的写法
     if (lastDo === '+') {
        if (secondNum) {
           resultNum += secondNum;
        } else {
           resultNum += firstNum;
        }
        // 这是第一行显示屏
        // 可以结合执行结果看每个值都是什么
        value1Dom.innerText = resultNum + lastDo + secondNum + value;
        // 执行的最后结果要显示到第二行显示屏
        value2Dom.innerText = resultNum;
     }
     break;

至此,加号的逻辑已经写完了

5、其他符号

        相信如果看明白了加法的逻辑,其他减法,乘法,除法的逻辑也可以对应的进行修改代码了。

        学习软件开发,不管是什么语言,看代码不是最重要的,而是要不断的写,不断的练,练自己对基本写法的熟练,练自己的基本逻辑思维。只有基础稳固了,才能去完成企业的需求,才可以走的更远。

      有需要的私信联系我哦

js实现Windows计算器
05-22 5063
HTML: <div id="calc"> <h2 class="header"> <a href="javascript:void(0);" class="mini"></a> <a href="javascript:void(0);" class="close"></a> </h2> <div class="wrapper"> <div class="content"&g.
使用 JavaScript 创建一个简单的计算器
qq_60597540的博客
11-05 7565
通过这个示例,我们可以看到使用 JavaScript 创建一个简单的计算器是非常简单的。JavaScript 提供了丰富的功能和灵活性,使得开发者能够轻松地实现各种交互功能。以上代码是一个简单的 HTML 页面,其中包括两个输入框和四个按钮,用于实现加、减、乘、除操作。JavaScript 是一种广泛应用于网页开发的脚本语言,它具有灵活、动态和强大的特性。本文将演示如何使用 JavaScript 创建一个简单的计算器,并实现基本的加减乘除操作。MDN Web 文档:JavaScript
JavaScript】实现仿windows计算器(完整版)
chandfy的博客
09-02 2669
js实现仿windos计算器 往期源码回顾: 【Java】实现绘图板(完整版) 【C++】图书管理系统(完整板) 【Java】实现计算器(完整版) 【Python】实现爬虫,爬取天气情况并进行分析(完整版) 【Java】实现记事本(完整版) 【Java】实现多线程计算阶乘和(完整版) 【Java】实现聊天程序(完整版)本项目速览: 3.功能模块划分: 4.部分函数流程图: 5.设计与实现
使用JS基础知识实现的简易计算器
th891166的博客
07-19 438
本期做的是一个简易计算器,可以实现基本的四则运算。
手写原生js实现简单计算器的功能
suandfei的博客
11-19 402
话不多说 直接看图片 其实核心思想 就是用了一个eval 函数 里面可以解析带运算符的字符串 但是一定要吧除号和乘号替换成代码里的* 和/ 其他就没有什么了 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewpo...
js实现简单的计算器
起小点
05-22 738
js实现简单的计算器 1.实现代码如下 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> window.onload = functio...
仿windows计算器JavaScript实现)
qq_38473254的博客
05-26 646
任务要求: 名称:仿windows计算器功能: 实现单击按钮录入数字 实现基础四则运算功能,并添加必要的异常处理,例如,除数为0 实现小数点功能并添加异常处理:小数点只能出现一次 实现正负号功能 实现退位功能,已经是最后一位时,显示框显示为0 清屏功能 使用的知识点: 利用大量的自定义函数实现业务逻辑 灵活运用事件及事件处理 培养异常处理的编程方法 培养并实践利用不同思路实现编程 综合练习的目的: 将csshtml和js有效的进行技术组合,实现业务功能 锻炼和培养编程思想,解决问题的能力和方法
javascript-calculator-windows:使用JavascriptHTMLCSS创建的Windows 10计算器克隆
04-29
在本项目中,“javascript-calculator-windows”是一个使用JavaScriptHTMLCSS构建的Windows 10计算器的克隆版。这个项目旨在帮助学习者通过实践理解Web前端开发中的基本概念,特别是JavaScript编程语言在动态...
JavaScript实现一个加减计算器.zip
最新发布
09-06
JavaScript实现一个加减计算器.zip
JavaScriptHTML实现一个精美的计算器
07-29
JavaScriptHTML实现一个精美的计算器
JavaScript实现一个简易计算器功能
weixin_45539338的博客
06-11 1838
JavaScript实现简易计算器功能
手写计算器
01-05
小巧好用的电脑计算器手写输入。就像您在抄稿纸上演算一样方便,完全符合我们传统的计算习惯。
JavaScript 仿windows 计算器
02-26
html+css+JavaScript 一个简单版仿windows 计算器,界面非常相似,有最大化、最小化以及关闭窗口按钮,计算功能只有加减乘除,用的都是刚学的js基础知识,没有面向对象,内容简单易懂,关系嵌套清晰明了,还了分析注释,经过几天调试基本上排出了各种bug,用户体验良好。http://a2.qpic.cn/psb?/447355734/RY04vHXG.virF.QvgYo0VG4LJTMkjWqmTwYKE9tJKus!/b/dHgBAAAAAAAA&bo=PQGSAQAAAAAFB4s!&rf=viewer_4
手写计算器My Script Calculator_1.0.1
02-19
手写计算器My Script Calculator_1.0.1
JS山寨windows7下计算器(普通版)
10-15
个人的JS练手代码 菜鸟一只 不喜勿喷 请指正就好
手写计算器windows
04-06
Nokia 出的手写计算器windows版,可以直接输入公式和计算符号,比如根号等,如果输入错误可以在输入的地方画圈,就擦掉了,很方便,很有趣。
Javascript 实现简单计算器实例代码
weixin_33753003的博客
11-15 174
这篇文章主要介绍了Javascript 实现简单计算器实例代码的相关资料,需要的朋友可以参考下    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34...
js面向对象实现win10计算功能(es6新语法项目的简单启动方式)
Rookie
04-05 832
此篇是继续上篇的内容的补充,上篇博客只完整了基本面向对象的框架搭建等步骤,而最重要的核心算法部分却未讲解,此篇博客将详细的讲解如何实现win10基本计算器的后台算法。 由于篇幅有限,这里我只讲解算法,完整源码可以点击右边github链接获取:win10计算器代码(源码里还有详细的功能介绍文档) 注意:由于此项目运用到了es6的面向对象语法,所以不能通过html页面直接运行,这里给不会运行的朋友介绍...
JavaScript基础教程:从Hello World到交互计算器示例
5. **实际案例:简单计算器**:文档提供了一个HTMLJavaScript结合的简单计算器示例。用户可以在输入框中输入数字,然后通过JavaScript处理计算,如`<input type="text" id="num1">`用于输入第一个数,`document....
写文章

热门文章

  • ChatGPT想干掉开发人员,做梦去吧 121497
  • 看ChatGPT这形势,留给我们开发人员的时间不多了 60256
  • 蓝桥杯,我劝你不要参加的8个完美理由 59939
  • vue2.0 点击其他区域关闭自定义div 40484
  • HTML最新面试题(笔试面试题) 40286

分类专栏

  • 打造优秀的开发求职简历 付费 22篇
  • Vue + SpringBoot前后端分离项目实战 付费 20篇
  • js-tool-big-box 33篇
  • WEB前端小白从这里出发 33篇
  • WEB前端最新面试题 - 又全又卷 91篇
  • 狗哥梦话职场 84篇
  • 前端WEB3 8篇
  • 简历宝典 20篇
  • 从浏览器输入网址到页面显示 13篇
  • 大学毕业解疑 55篇
  • React 8篇
  • 前端面试千题计划 73篇
  • CSS3动画特效 27篇

最新评论

  • 前端JS必用工具【js-tool-big-box】学习,获取某个元素滚动方向和滚动距离

    爱编程的喵喵: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文

  • 前端JS必用工具【js-tool-big-box】学习,获取某个元素滚动方向和滚动距离

    herosunly: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文

  • 前端JS必用工具【js-tool-big-box】学习,获取某个元素滚动方向和滚动距离

    韩楚风: 思路很清晰,讲的也通俗易懂,绝对的优质好文,感谢博主的分享,期待博主的下一篇文章

  • 【前端新手小白】学习Javascript的【开源好项目】推荐

    穷苦书生_万事愁: 博主的文章真是一篇难得的好文,让我对Javascript开源项目有了全新的认识。文章内容详实,细节描写到位,展现出博主的深厚专业功底。期待博主未来能够持续分享更多精彩的文章,希望能够得到博主的指导,一起共同进步成长。非常感谢博主的分享和支持!

  • 前端JS必用工具【js-tool-big-box】学习,获取全球热点城市当前时间、时区以及令时

    爱编程的喵喵: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文

最新文章

  • 前端JS必用工具【js-tool-big-box】学习,获取某个元素滚动方向和滚动距离
  • 前端JS必用工具【js-tool-big-box】学习,获取全球热点城市当前时间、时区以及令时
  • 【CSS入门】第五课 - font字体
2024
09月 2篇
08月 16篇
07月 66篇
06月 41篇
05月 64篇
04月 89篇
2023年93篇
2022年103篇
2020年3篇
2018年1篇
2017年12篇
2016年3篇
2014年1篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

经海路大白狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

天下网标王网站优化和维护青神县网站优化论坛网站优化方式有哪些武昌网站优化推广优选企业兖州网站优化报价嘉定区信息网站服务优化价格网站整站优化收费标准惠水网站优化推广网站的整体搜索引擎优化概述安平县网站优化培训广东网站竞价优化收费绥化网站优化公司揭阳资深的免费网站优化成都网站优化上刻 羽云怎么看英文网站优化上海品质网站优化耗材网站优化推广外包专业互联网网站优化的方法锦州网站优化哪家便宜seo网站结构优化指标机械公司网站优化方案网站meta优化有哪些seo网站优化排名辛集优化网站价格网站seo优化学习黄骅网站权重优化网站推广优化贵吗夏津东莞网站优化崇明区公司官方网站优化排名成都网站优化培训哪家好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

天下网标王 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化