简易的计算器

html:

<body>
	<div class="outer">
	    <div class="buzhou"></div>
	    <div class="sum">0</div>
	    <table>
	        <tr>
	            <td class="gary">c</td>
	            <td class="gary baifenhao">%</td>
	            <td id="divide" class="gary">&divide;</td>
	            <td id="times" class="gary">&times;</td>
	        </tr>
	        <tr>
	            <td>7</td>
	            <td>8</td>
	            <td>9</td>
	            <td class="gary">-</td>
	        </tr>
	        <tr>
	            <td>4</td>
	            <td>5</td>
	            <td>6</td>
	            <td class="gary">+</td>
	        </tr>
	        <tr>
	            <td>1</td>
	            <td>2</td>
	            <td>3</td>
	            <td class="orange" rowspan="2">=</td>
	        </tr>
	        <tr>
	            <td colspan="2">0</td>
	            <td>.</td>
	        </tr>
	    </table>
	</div>
</body>

style:

<style>
    *{
        margin: 0;
        padding: 0;
    }
    .outer{
        width: 500px;
        margin: 10px auto;
        overflow: hidden;
    }
    td{
        width: 100px;
        height: 60px;
        font-size: 36px;
        border-radius: 8px;
        text-align: center;
        line-height: 40px;
        color: white;
        background-color: #000000;
    }
    td:hover{
        cursor: pointer;
    }
    td:active{
        background-color: #00f6f6;
    }
    table{
        background-color: #1C1C1C;
        border-spacing: 20px;
    }
    .gary{
        background-color: #7D6E64;
    }
    .orange{
        background-color: #EE7714;
    }
    .baifenhao{
        font-size: 26px;
    }
    .buzhou{
        height: 20px;
        background-color: #DBDFC5;
        text-align: right;
        padding-top: 5px;
        padding-bottom: 5px;
        overflow: hidden;
    }
    .sum{
        height: 70px;
        background-color: #DBDFC5;
        font-size: 66px;
        line-height: 60px;
        text-align: right;
        padding-bottom: 10px;
        padding-left: 17px;
        overflow: hidden;
    }
</style>

script:

<script type="text/javascript">
    window.onload = function(){
        var alltd = document.querySelectorAll('.outer table td');
        var buzhou = document.getElementsByClassName('buzhou')[0];
        var sum = document.getElementsByClassName('sum')[0];
        var _divide = document.getElementById('divide').innerText;
        var _times = document.getElementById('times').innerText;

        var arr = new Array();
        var temp = ''; //保存输入的数  12.333

        for (var i=0; i<alltd.length; i++){
            alltd[i].onclick = function () {

                buzhou.innerText += this.innerText;
                if (this.innerText === '='){
                    arr.push(temp);

                    //此处计算得出结果
                    //将数组倒置,可以简化不步骤,少改下标
                    //我的思路:将数组慢慢变短,知道arr[0]的时候,即使最后的结果
                    arr = arr.reverse();
                    console.log(arr);
                    //将数组运算,最后得出结果
                    for (var k=arr.length-1; k>=0; k--){
                        if (arr[arr.length-2] === _divide){
                            arr[arr.length-3] = arr[arr.length-1] /  arr[arr.length-3];
                            // arr.pop();
                            // arr.pop();
                            arr.length -= 2; //每运算一次,数组长度减二
                        } else if (arr[arr.length-2] === _times){
                            arr[arr.length-3] = arr[arr.length-1] * arr[arr.length-3];
                            arr.length -= 2;
                        } else if (arr[arr.length-2] === '%'){
                            arr[arr.length-3] = arr[arr.length-1] % arr[arr.length-3];
                            arr.length -= 2;
                        } else if (arr[arr.length-2] === '+'){
                            if (arr[arr.length-4] === '%'){
                                arr[arr.length-5] = arr[arr.length-3] % arr[arr.length-5];
                                arr[arr.length-4] = arr[arr.length-2];
                                arr[arr.length-3] = arr[arr.length-1];
                                arr.length -= 2;
                            } else if (arr[arr.length-4] === _divide) {
                                arr[arr.length-5] = arr[arr.length-3] / arr[arr.length-5];
                                arr[arr.length-4] = arr[arr.length-2];
                                arr[arr.length-3] = arr[arr.length-1];
                                arr.length -= 2;
                            } else if (arr[arr.length-4] === _times) {
                                arr[arr.length-5] = arr[arr.length-3] * arr[arr.length-5];
                                arr[arr.length-4] = arr[arr.length-2];
                                arr[arr.length-3] = arr[arr.length-1];
                                arr.length -= 2;
                            } else {
                                //parseFloat:防止+运算符做字符串连接,我这里实现的是加法运算
                                arr[arr.length-3] = parseFloat(arr[arr.length-1]) + parseFloat(arr[arr.length-3]);
                                arr.length -= 2;
                            }
                        } else if (arr[arr.length-2] === '-'){
                            if (arr[arr.length-4] === '%'){
                                arr[arr.length-5] = arr[arr.length-3] % arr[arr.length-5];
                                arr[arr.length-4] = arr[arr.length-2];
                                arr[arr.length-3] = arr[arr.length-1];
                                arr.length -= 2;
                            } else if (arr[arr.length-4] === _divide) {
                                arr[arr.length-5] = arr[arr.length-3] / arr[arr.length-5];
                                arr[arr.length-4] = arr[arr.length-2];
                                arr[arr.length-3] = arr[arr.length-1];
                                arr.length -= 2;
                            } else if (arr[arr.length-4] === _times) {
                                arr[arr.length-5] = arr[arr.length-3] * arr[arr.length-5];
                                arr[arr.length-4] = arr[arr.length-2];
                                arr[arr.length-3] = arr[arr.length-1];
                                arr.length -= 2;
                            } else {
                                arr[arr.length-3] = arr[arr.length-1] - arr[arr.length-3];
                                arr.length -= 2;
                            }
                        }
                    }

                    if (isNaN(arr[0])){
                        sum.innerText = '输入有误'; //错误提示
                    } else {
                        sum.innerText = arr[0]; //最终的结果就是arr[0]
                    }
                    this.onclick = null; //按一次等号就算出结果,再次按等号,不会改变
                } else if (this.innerText === 'c'){
                    buzhou.innerText = '';
                    sum.innerText = 0;
                    //页面刷新
                    window.location.reload();
                } else {
                    // 如果输入的字符不是数字(+,-,*,/,%)的时候,直接把该字符push进arr数组
                    // 如果一直在输入数字,则把输入的数字(12.345)拼个串,在输入非数字时将数字push进数组
                    // 注意:在你点击=号之前,你也输入了一个数字,记得在绑定=号时将数字push进数组中
                    if (this.innerText === _divide || this.innerText === _times || this.innerText === '%' || this.innerText === '+' || this.innerText === '-'){
                        arr.push(temp);
                        arr.push(this.innerText);
                        temp = '';
                    } else {
                        temp += this.innerText;
                    }
                }
            }
        }
    }
</script>

猜你喜欢

转载自blog.csdn.net/weixin_44038355/article/details/84944303