JS + HTML实现计算器

代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        li {
            list-style: none;
        }
        .calculator {
            width: 700px;
            height: 700px;
            margin: 30px auto;
            border: 1px solid grey;
        }
        .screen {
            width: 100%;
            height: 200px;
        }
        .keyboard {
            width: 100%;
            height: 500px;
            /* background: olivedrab; */
        }
        .keyboard ul {
            width: 100%;
            height: 100%;
            display: flex;
            flex-wrap: wrap;
        }
        .keyboard ul li{
            text-align: center;
            line-height: 90px;
            font-size: 25px;
            box-sizing: border-box;
            flex: 0 1 auto;
            width: 25%;
            height: 20%;
            border-right: 1px solid grey;
            border-bottom:1px solid grey;
            
        }
        .keyboard ul li:hover{
            background: #ddd;
        }
        .keyboard ul li.topBor {
            border-top: 1px solid grey;
        }
        .keyboard ul li.rightBor {
            border-right: 0;

        }
        .keyboard ul li.rightBor:hover {
            background: skyblue;

        }
        .keyboard li.noNum {
            background: rgb(240, 238, 238);
        }
        .calculator .screen-calc {
            width: 100%;
            height: 100px;
            color: rgb(31, 29, 29);
        }
        .calculator .screen-input {
            width: 100%;
            height: 100px;
            font-size: 20px;
        }
    </style>
</head>
<body>
    <div class="calculator">
        <div class="screen">
            <div class="screen-calc"></div>
            <div class="screen-input"></div>
        </div>
        <div class="keyboard">
            <ul>
                <li class="topBor noNum">CE</li>
                <li class="topBor noNum">C</li>
                <li class="topBor noNum"><-</li>
                <li class="topBor rightBor noNum">÷</li>
                <li>7</li>
                <li>8</li>
                <li>9</li>
                <li class="rightBor noNum">*</li>
                <li>4</li>
                <li>5</li>
                <li>6</li>
                <li class="rightBor noNum">-</li>
                <li>1</li>
                <li>2</li>
                <li>3</li>
                <li class="rightBor noNum">+</li>
                <li class="noNum">±</li>
                <li>0</li>
                <li class="noNum">.</li>
                <li class="rightBor noNum">=</li>
            </ul>            
        </div>
    </div>
    <script>
        //键盘对象
        (function(){
            function KeyBoard(list,screenInput,screenCalc){
                this.list = list;
                this.screenInput = screenInput;
                this.value = 0;
                this.screenCalc = screenCalc;
            }
            KeyBoard.prototype.init = function(){
                this.bindEvent();
            }
            KeyBoard.prototype.bindEvent = function(){
                this.list[4].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    console.log(this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1]);
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷' )&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '7';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '7';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    console.log(this.value)
                    }
                }.bind(this);
                this.list[5].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '8';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '8';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[6].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '9';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '9';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[8].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '4';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '4';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[9].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '5';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '5';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[10].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '6';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '6';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[12].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '1';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '1';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[13].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '2';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '2';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[14].onclick = function(){
                    if(this.screenInput.innerHTML == '0'){
                        this.screenInput.innerHTML = '';
                    }
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '3';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '3';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[17].onclick = function(){
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenInput.innerHTML == ''){
                        this.screenInput.innerHTML = '0';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '0';
                    this.value = parseFloat(this.screenInput.innerHTML);
                    }
                }.bind(this);
                this.list[18].onclick = function(){
                    console.log(this.screenInput.innerHTML.match(/\./g));  //或者indexOf('.')返回-1
                    if(this.screenInput.innerHTML.match(/\./g) !== null){
                        return;
                    }
                    if((this.screenCalc.innerHTML == '' && this.screenInput.innerHTML == '') || ((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenCalc.innerHTML != ''&&this.screenInput.innerHTML=='')){
                        this.screenInput.innerHTML = '0' + '.';
                    }else{
                    this.screenInput.innerHTML = this.screenInput.innerHTML + '.';
                    }
                }.bind(this);
                this.list[3].onclick = function(){
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenCalc.innerHTML!=''&&this.screenInput.innerHTML==''){
                        this.screenCalc.innerHTML = this.screenCalc.innerHTML.slice(0,this.screenCalc.innerHTML.length-1) + '÷';
                        return;
                    }
                    if(this.screenCalc.innerHTML == '' && this.screenInput.innerHTML == ''){
                        this.screenCalc.innerHTML='0÷';
                        return;
                    }
                    if(this.screenCalc.innerHTML == ''){
                    this.screenCalc.innerHTML = this.screenInput.innerHTML + '÷';
                    this.screenInput.innerHTML = '';
                    }
                    else{
                        this.screenCalc.innerHTML=this.screenCalc.innerHTML+ this.screenInput.innerHTML + '÷';
                        this.screenInput.innerHTML = '';
                    }
                    // console.log(this.screenCalc.innerHTML)
                }.bind(this);
                this.list[7].onclick = function(){
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenCalc.innerHTML!=''&&this.screenInput.innerHTML==''){
                        this.screenCalc.innerHTML = this.screenCalc.innerHTML.slice(0,this.screenCalc.innerHTML.length-1) + '*';
                        return;
                    }
                    if(this.screenCalc.innerHTML == '' && this.screenInput.innerHTML == ''){
                        this.screenCalc.innerHTML='0*';
                        return;
                    }
                    if(this.screenCalc.innerHTML == ''){
                    this.screenCalc.innerHTML = this.screenInput.innerHTML + '*';
                    this.screenInput.innerHTML = '';
                    }
                    else{
                        this.screenCalc.innerHTML=this.screenCalc.innerHTML+ this.screenInput.innerHTML + '*';
                        this.screenInput.innerHTML = '';
                    }
                    // console.log(this.screenCalc.innerHTML)
                }.bind(this);
                this.list[11].onclick = function(){
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenCalc.innerHTML!=''&&this.screenInput.innerHTML==''){
                        this.screenCalc.innerHTML = this.screenCalc.innerHTML.slice(0,this.screenCalc.innerHTML.length-1) + '-';
                        return;
                    }
                    if(this.screenCalc.innerHTML == '' && this.screenInput.innerHTML == ''){
                        this.screenCalc.innerHTML='0-';
                        return;
                    }
                    if(this.screenCalc.innerHTML == ''){
                    this.screenCalc.innerHTML = this.screenInput.innerHTML + '-';
                    this.screenInput.innerHTML = '';
                    }
                    else{
                        this.screenCalc.innerHTML=this.screenCalc.innerHTML+ this.screenInput.innerHTML + '-';
                        this.screenInput.innerHTML = '';
                    }
                    // console.log(this.screenCalc.innerHTML)
                }.bind(this);
                this.list[15].onclick = function(){
                    if((this.screenCalc.innerHTML[this.screenCalc.innerHTML.length-1] == '+'||'-'||'*'||'÷')&&this.screenCalc.innerHTML != ''&&this.screenInput.innerHTML==''){
                        this.screenCalc.innerHTML = this.screenCalc.innerHTML.slice(0,this.screenCalc.innerHTML.length-1) + '+';
                        return;
                    }
                    if(this.screenCalc.innerHTML == '' && this.screenInput.innerHTML == ''){
                        this.screenCalc.innerHTML='0+';
                        return;
                    }
                    if(this.screenCalc.innerHTML == ''){
                    this.screenCalc.innerHTML = this.screenInput.innerHTML + '+';
                    this.screenInput.innerHTML = '';
                    }
                    else{
                        this.screenCalc.innerHTML=this.screenCalc.innerHTML+ this.screenInput.innerHTML + '+';
                        this.screenInput.innerHTML = '';
                    }
                    // console.log(this.screenCalc.innerHTML)
                }.bind(this);
                this.list[19].onclick = function(){
                    this.screenCalc.innerHTML=this.screenCalc.innerHTML+ this.screenInput.innerHTML;
                    this.screenInput.innerHTML = eval((this.screenCalc.innerHTML.replace('÷','/')).replace(/--/g,'+'));
                    this.screenCalc.innerHTML = '';
                }.bind(this);
                this.list[1].onclick = function(){
                    this.screenInput.innerHTML = '';
                    this.screenCalc.innerHTML = '';
                }.bind(this);
                this.list[0].onclick = function(){
                    this.screenInput.innerHTML = '';
                }.bind(this);
                this.list[2].onclick = function(){
                    this.screenInput.innerHTML = this.screenInput.innerHTML.slice(0,this.screenInput.innerHTML.length-1);  //slice含头不含尾
                }.bind(this);
                this.list[16].onclick = function(){
                    if(this.screenInput.innerHTML != ''){
                    this.screenInput.innerHTML = '-' + this.screenInput.innerHTML;
                    }
                }.bind(this);

            }


            window.KeyBoard = KeyBoard;
        })();
        var key = new KeyBoard(document.getElementsByTagName('li'),document.getElementsByClassName('screen-input')[0],
        document.getElementsByClassName('screen-calc')[0]);
        key.init();
        (function(){
            
        })();
        
    </script>
</body>
</html>

演示

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值