用简单的JS代码制作计算器
代码+注释一共不到200行,是练习交流的必备良药
主界面如下:

操作示意图:

以下是代码部分
HTML:
<div>
    <table class="window">
        <tr>
            <td class="window_prompt">输入 :</td>
            <td><div id="userIn"><div class="text">简易的计算器</div></div></td>
        </tr>
        <tr>
            <td class="window_prompt">结果是 :</td>
            <td><div id="mathResult"><div class="text">by keats_Coder</div></div></td>
        </tr>
    </table>
    <table id="main">
        <tr>
            <td colspan="2" id="clear">C</td>
            <td id="back">退格</td>
            <td id="operator4">/</td>
        </tr>
        <tr>
            <td id="num7" class="num">7</td>
            <td id="num8" class="num">8</td>
            <td id="num9" class="num">9</td>
            <td id="operator3">x</td>
        </tr>
        <tr>
            <td id="num4" class="num">4</td>
            <td id="num5" class="num">5</td>
            <td id="num6" class="num">6</td>
            <td id="operator2">-</td>
        </tr>
        <tr>
            <td id="num1" class="num">1</td>
            <td id="num2" class="num">2</td>
            <td id="num3" class="num">3</td>
            <td id="operator1">+</td>
        </tr>
        <tr>
            <td id="minus">±</td>
            <td id="num0" class="num">0</td>
            <td id="dot">.</td>
            <td id="result">=</td>
        </tr>
    </table>
</div>
CSS部分:
<style>
        .text{
            float: right;
            height: 30px;
            width: 238px;
            font-size: 20px;
            line-height: 30px;
            color: #aaaaaa;
        }
        div{
            float: left;
            margin-left: 40%;
        }
        .window{
            margin-left: 2px;
            border: black 1px solid;
        }
        .window_prompt{
            width: 70px;
            text-align: right;
        }
        #mathResult,#userIn{
            margin-left: 10px;
            border: black 1px solid;
            height: 30px;
            width: 238px;
            text-align: right;
            font-size: 25px;
            line-height: 30px;
            padding-right: 10px;
        }
        #main td{
            border: black 1px solid;
            height: 50px;
            width: 80px;
            text-align: center;
            font-size: 30px;
        }
        #main td:hover{
            background-color: #dddddd;
        }
        #main td:active{
            background-color: #505050;
        }
    </style>
JavaScript部分:
 <script>
        //定义变量存储用户当前输入(即上一个运算符之后,下一个运算符之前)的内容
        var string = "";
        //数组用来存储用户在一次运算结束前的所有的数字
        var nums = new Array();
        //数组用来存储运算符
        var maths = new Array();
        //函数:显示当前输入
        function showScreen(){
            document.getElementById("userIn").innerText = string;
        }
        //清除按钮功能:清除屏幕内容,并重置数据(当前输入内容,运算符,运算符之前的内容)
        document.getElementById("clear").onclick = function () {
            string = "";
            nums = new Array();
            maths = new Array();
            document.getElementById("userIn").innerHTML = "<div class=\"text\">简易的计算器</div>";
            document.getElementById("mathResult").innerHTML = "<div class=\"text\">by keats_Coder</div>";
        }
        //退格按钮功能:删除当前输入栏最后一个输入的数字
        document.getElementById("back").onclick = function () {
            if( string ){
                string = new String(string).substring(0,string.length-1)
            }
            showScreen();
        }
        //小数点
        document.getElementById("dot").onclick = function () {
            string = string + ".";
            showScreen();
        }
        //正负号
        document.getElementById("minus").onclick = function(){
            if (string) {
                string = parseInt(string) * (-1);
            }
            showScreen();
        }
        //运算符功能,1 --> +; 2 --> -; 3 --> *; 4 --> /
        for (var i = 1; i <= 4; i++) {
            document.getElementById("operator"+i).onclick = (function (i){
                return function() {
                    maths.push(i);
                    nums.push(string);
                    string = "";
                    showScreen();
                }
            })(i);
        }
        //数字按钮
        for (i = 0; i < 10; i++) {
            document.getElementById("num"+i).onclick = (function (i) {
                return function () {
                    string = string + i;
                    showScreen();
                }
            })(i);
        }
        //等号按钮。运算并显示结果
        document.getElementById("result").onclick = function () {
            //定义变量-结果
            var result;
            //如果用户参与运算的只有一个
            if (nums.length == 0) {
                result = string;
            }else {
                //将最后一个数存入数组
                nums.push(string);
                //取出数组中的值进行运算
                for (var i = 0; i < nums.length - 1; i++) {
                    var right = nums[i + 1];
                    var math = maths[i];
                    if (i == 0) {
                        result = nums[0];
                    }
                    switch (math) {
                        case 1:
                            result = parseFloat(result) + parseFloat(right);
                            break;
                        case 2:
                            result = parseFloat(result) - parseFloat(right);
                            break;
                        case 3:
                            result = parseFloat(result) * parseFloat(right);
                            break;
                        case 4:
                            result = parseFloat(result) / parseFloat(right);
                            break;
                    }
                }
            }
            //将结果安排到结果栏
            document.getElementById("mathResult").innerText = result;
            //重置计算器
            string = "";
            nums = new Array();
            maths = new Array();
        }
    </script>
欢迎留言交流与指正!
用简单的JS代码制作计算器的更多相关文章
- 20行js代码制作网页刮刮乐
		
分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码效果如下 盖伦.jpg 刮刮乐.gif HTML部分 <body>  &l ...
 - angularJS入门小Demo【简单测试js代码的方法】
		
1.首先建立一个文件夹 demo, 2.在其中建立一个文本文档,改名为 demo-1.html, 3.把html中要引入的 js 文件拷贝到 demo目录下, 4.然后用 Notepadd++ 编辑刚 ...
 - 两段简单的JS代码防止SQL注入
		
1.URL地址防注入: //过滤URL非法SQL字符var sUrl=location.search.toLowerCase();var sQuery=sUrl.substring(sUrl.inde ...
 - 一些简单的Js代码的封装
		
1 function getById(id) { 2 3 } 4 5 function getAttr(el, k) { 6 7 } 8 9 function setAttr(el, k, v) { ...
 - 实际项目中积累的一些关于事件的简单应用JS代码段(能力有限,不喜轻喷,23333)
		
1:鼠标移入移出显示另一张图片 var yuanquan_1 = document.getElementById("yuanquan_1" ); yuanquan_1. onmo ...
 - 简单倒计时js代码
		
//倒计时 var timer=null; var interval = 1000; function ShowCountDown(year,month,day,hour,minute,second, ...
 - JS代码指导原则
		
一.什么是平稳退化? 如果含有JS代码的网页在用户浏览器不支持JS(或者禁用JS)时,用户仍然能够顺利浏览(网站功能正常,只是视觉效果可能差一些),那么这个网页就能够平稳退化 网页能够平稳退化是很必要 ...
 - JS代码的简单重构与优化
		
JS代码的简单重构与优化(适合新手) 原文 http://www.cnblogs.com/similar/p/5016424.html Demo . 1 //bad if (age > 20) ...
 - JS实现简单的运行代码 & 侧边广告
		
/* JS实现简单的运行代码功能 */<!doctype html> <html> <head> <meta charset="utf-8" ...
 
随机推荐
- 2019-11-29-WPF-多个-StylusPlugIn-的事件触发顺序
			
原文:2019-11-29-WPF-多个-StylusPlugIn-的事件触发顺序 title author date CreateTime categories WPF 多个 StylusPlugI ...
 - Huawei LiteOS简介
			
Huawei LiteOS简介 Huawei LiteOS是华为面向物联网领域开发的一个基于实时内核的轻量级操作系统.本项目属于华为物联网操作系统Huawei LiteOS源码,现有基础内核支持任务管 ...
 - 24个Jvm面试题总结及答案
			
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”? Java虚拟机是一个可以执行Java字节码的虚拟机进程.Java源文件被编译成能被Java虚拟机执行的字节码文件. Java被 ...
 - Android Scrollview嵌套下listView动态加载数据,解决onScrollChanged执行多次数据重复问题
			
这一篇博客和上一篇讲的都是listView的动态加载,但有所不同的是,本篇的listView是嵌套在ScrollView下的,有时候在一个Activity中可能分为好几个模块,由于展示的需要(手机屏幕 ...
 - MySQL的select详细介绍
			
MySQL 查询数据 MySQL 数据库使用SQL SELECT语句来查询数据. 你可以通过 mysql> 命令提示窗口中在数据库中查询数据 语法 以下为在MySQL数据库中查询数据通用的 SE ...
 - Nginx 高级配置-压缩功能
			
Nginx 高级配置-压缩功能 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx压缩相关参数概述 1>.gzip on | off; Nginx支持对指定类型的文 ...
 - MySQL多实例安装、配置、启动(四)
			
一.规划信息 系统信息: cat /etc/redhat-release CentOS Linux release (Core) # uname -r -.el7.x86_64 数据库规划 PORT: ...
 - 安装Visual Studio 时窗口闪过就退出
			
双击安装文件,窗口闪了下就退出了. 解决方法:控制面板 ———程序——程序和功能——打开或关闭Windows功能——关闭NET相关框架. 然后再次安装即可. 参考文献: VS安装程序一闪而过
 - logstash 监控日志文件时应对日志文件名改变的原理
			
开门见山先说结论:基于inode实现. 分析很简单,logstash是用一个filewatch去监视文件的.在logstash目录里搜索filewatch即可找到该目录 logstash/vendor ...
 - 07-C#笔记-运算符
			
1. 支持++和-- 含义和C++中相同 2. 条件运算 同C++ 3. 位运算 ^ 异或 ~ 取反 4. 支持?:运算 5. 特殊 is 判断对象是否为某一类型. If( Ford is Car) ...