• Javascript计算器


    这两天写了个js的计算器,分为简单版本和复杂版本,以此留记。

    简单版本:

    HTML部分:

    <fieldset>
            <legend>Calculate By nanxI</legend>
            <div>
            第一个数:<input type="text" name="num" value="" />
            </div>
            第二个数:<input type="text" name="num" value="" />
            <div id="btn">
            <span id="fh">算式符号:</span>
            <button id="jia" >+</button>
            <button id="jian" >-</button>
            <button id="cheng" >×</button>
            <button id="chu" >÷</button>
            </div>
            结果:<input type="text" name="num" value="" class="jieguo"/>
        </fieldset>

    CSS部分:

    fieldset{
        width:250px;
        margin: 0 auto;
        height: 250px;
    }
    input{
        width: 100px;
        margin-top: 20px;
        height: 25px;
        line-height: 25px;
        font-size: 18px;
        margin-left: 10px;
        margin-right: 10px;
    }
    select{
        height: 30px;
        line-height: 30px;
        width: 50px;
        font-size: 18px;
        color:#ff4387;
    }
    button{
        width: 30px;
        height: 30px;
        background: none;
        display: inline-block;
        position: relative;
        bottom: 1px;
        left:90px;
        top:10px;
    }
    #btn{
        position: relative;
    }
    #fh{
        display: inline-block;
        position: absolute;
        top:15px;
    }
    .jieguo{
        position: relative;
        left: 33px;
    }

    JS部分:

    function cal(){
        var num=document.getElementsByName('num');
        var select=document.getElementsByTagName('option');
        var z;
        var btn=document.getElementById('get');
        var jia=document.getElementById('jia');
        var jian=document.getElementById('jian');
        var cheng=document.getElementById('cheng');
        var chu    =document.getElementById('chu');
        jia.onclick = function jia(){
            var x=num[0].value;
            var y=num[1].value;
            z = Number(x) + Number(y);
            num[2].value = z;
        }
        jian.onclick = function jian(){
            var x=num[0].value;
            var y=num[1].value;
            z = Number(x) - Number(y);
            num[2].value = z;
        }
        cheng.onclick = function cheng(){
            var x=num[0].value;
            var y=num[1].value;
            z = Number(x) * Number(y);
            num[2].value = z;
        }
        chu.onclick = function chu(){
            var x=num[0].value;
            var y=num[1].value;
            z = Number(x) / Number(y);
            num[2].value = z;
        }
    
    }
    cal();

    效果图:

    复杂版本:

    HTML代码:

    <div id="complex">
        <div id="calcu-screen">
        <input type="text" name="numScreen" class="screen" value="0" onfocus="this.blur();" /> 
        </div> 
        <table id="suanpan" cellspacing="0">
            <tr class="graybgc">
                <td style="color:#FF4500" onclick="clearscreen()">AC</td>
                <td style="color:#FF4500" onclick="del();"></td>
                <td onclick="persent()">%</td>
                <td class="bgcg" onclick="divide()">÷</td>
            </tr>
            <tr>
                <td onclick="jisuan(7);">7</td>
                <td onclick="jisuan(8);">8</td>
                <td onclick="jisuan(9);">9</td>
                <td class="bgcg" onclick="times()">×</td>
            </tr>
            <tr>
                <td onclick="jisuan(4);">4</td>
                <td onclick="jisuan(5);">5</td>
                <td onclick="jisuan(6);">6</td>
                <td class="bgcg" onclick="minus()">-</td>
            </tr>
            <tr>
                <td onclick="jisuan(1);">1</td>
                <td onclick="jisuan(2);">2</td>
                <td onclick="jisuan(3);">3</td>
                <td class="bgcg" onclick="plus()">+</td>
            </tr>
            <tr>
                <td onclick="jisuan(0);">0</td>
                <td onclick="dzero()">00</td>
                <td onclick="dot()">.</td>
                <td class="bgcg" onclick="equal()">=</td>
            </tr>
        </table>
    </div>

    CSS代码:

     

    #suanpan{
        border-top: 1px solid #f8f8f8;
        border-left: 1px solid #f8f8f8;
    }
    #suanpan td{
        border-right: 1px solid #f8f8f8;
        border-bottom: 1px solid #f8f8f8;
        margin:0;
        text-align: center;
        width: 40px;
        height: 40px;
        font-weight: "微软雅黑";
        cursor: pointer;
    }
    .bgcg{
        background: #f1f1f1;
    }
    .graybgc{
        background: #f1f1f1;
    }
    #suanpan td:hover{
        background: #f6f6f6;
    }
    #suanpan td:active{
        background: #C0C0C0;
    }
    .screen{
        min-height: 20px;
        width: 169px;
        background: #f5f5f5;
        text-align: right;
        overflow: hidden;
        margin:0;
    }
    #calcu-screen{
        max-height: 40px;
        font-weight: bold;
        font-family: "微软雅黑";
        font-size: 18px;
        max-width: 160px;
        word-break: break-all;
        margin:0;
    }
    #complex{
        margin: 0 auto;
        width: 250px;
        margin-top: 50px;
    }

    JS代码:

    var i;
    var conduct = document.getElementById('conduct');
    var num = 0,
        result = 0,
        numshow = "0";
    var operate = 0; //判断输入状态的标志 0,1 0为可以连续输入状态 1为重新输入状态
    var calcul = 0; //判断计算状态的标志 
    var calculator = document.getElementsByClassName('screen');
    
    function jisuan(num) {
        var str = String(calculator[0].value); //获得当前显示数据 
        str = (str != "0") ? ((operate == 0) ? str : "") : ""; 
        //如果当前值不是"0",且状态为0,则返回当前值,否则返回空值; 
        str = str + String(num); //给当前值追加字符 
        calculator[0].value = str;
        operate = 0; //重置输入状态  
    }
    
    function del() { //退格 
        var str = String(calculator[0].value);
        str = (str != "0") ? str : "";
        str = str.substr(0, str.length - 1);
        str = (str != "") ? str : "0";
        calculator[0].value = str;
    }
    
    function clearscreen() { //清除数据 
        num = 0;
        result = 0;
        numshow = "0";
        calculator[0].value = "0";
    }
    function dot(){ 
    var str=String(calculator[0].value); 
    str=(str!="0") ? ((operate==0) ? str : "0") : "0"; //如果当前值不是"0",且状态为0,则返回当前值,否则返回"0"; 
    for(i=0; i<=str.length;i++){ //判断是否已经有一个点号 
    if(str.substr(i,1)==".") return false; //如果有则不再插入 
    } 
    str=str + "."; 
    calculator[0].value=str; 
    operate=0; 
    }
    function dzero(){
        var str=String(calculator[0].value); 
    str=(str!="0") ? ((operate==0) ? str : "0") : "0"; //如果当前值不是"0",且状态为0,则返回当前值,否则返回"0"; 
    str=str+"00";
    calculator[0].value =str;
    operate = 0;
    }
    function plus() { //加法 
        calculate(); //调用计算函数 
        operate = 1; //更改输入状态 
        calcul = 1; //更改计算状态为加 
    }
    
    function minus() { //减法 
        calculate();
        operate = 1;
        calcul = 2;
    }
    
    function times() { //乘法 
        calculate();
        operate = 1;
        calcul = 3;
    }
    
    function divide() { //除法 
        calculate();
        operate = 1;
        calcul = 4;
    }
    
    function persent() { //求余 
        calculate();
        operate = 1;
        calcul = 5;
    }
    
    function equal() {
        calculate(); //等于 
        operate = 1;
        num = 0; //初始化
        result = 0; //初始化
        numshow = "0"; //初始化
    }
    
    function calculate() {
        numshow = Number(calculator[0].value);
        if (num != 0) { //判断前一个运算数是否为零 
            switch (calcul) { //判断要输入状态 
                case 1:
                    result = num + numshow;
                    break; //计算"+" 
                case 2:
                    result = num - numshow;
                    break; //计算"-" 
                case 3:
                    result = num * numshow;
                    break;
                case 4:
                    result = num / numshow;
                    break;
                case 5:
                    result = num % numshow;
                    break;
            }
        } else {
            result = numshow;
        }
        numshow = String(result);
        calculator[0].value = numshow;
        num = result; //存储当前值 
    }

    效果图:

    第二个复杂版本参考了 另一位大牛的 代码。

    对于切换模式 对于JS来说我认为是一个很好的方法。

    对于 ? :运算符也很有用。

    记录在此。

    那片天空,我即向往,在雷雨云风中,独自翱翔。
  • 相关阅读:
    【算法导论】第11章,散列表
    【算法导论】第10章,基本数据结构
    【推荐系统实践】冷启动问题
    【算法导论】第8、9章,线性时间排序,中位数顺序统计量
    【推荐系统实践】协同过滤
    Java编程思想---第五章 初始化与清理(下)
    Java编程思想---第五章 初始化与清理(上)
    Java编程思想---第四章 控制执行流程
    Java编程思想---第三章 操作符
    去除MyEclipse频繁弹出的Update Progress窗口
  • 原文地址:https://www.cnblogs.com/nanxi-zwj/p/6131067.html
Copyright © 2020-2023  润新知