Vue.js实现的计算器功能完整示例


这篇文章主要介绍了Vue.js实现的计算器功能,结合完整实例形式分析了vue.js响应鼠标事件实现基本的数值运算相关操作技巧,可实现四则运算及乘方、开方等功能,需要的朋友可以参考下,本文实例讲述了Vue.js实现的计算器功能。分享给大家供大家参考,具体如下:

1. HTML部分代码

<!DOCTYPE html>

<html lang= "en" >
<head>
   <link rel= "stylesheet" type= "text/css" href= "css/css.css" rel= "external nofollow" >
   <script type= "text/javascript" src= "https://cdn.bootcss.com/vue/2.5.16/vue.min.js" ></script>
   <meta charset= "UTF-8" >
   <title>my-calculator</title>
</head>
<body>
<div id= "calculator" >
   <!--显示框-->
   <input-box v-bind:input-show= "inputShow" >
   </input-box>
   <btn-list>
     <div @click= "clearValue()" class= " btn-30 btn-radius color-red clear-marginleft" >C</div>
     <div class= " btn-30 btn-radius color-blue" >+/-</div>
     <div @click= "inputValue('%')" class= " btn-30 btn-radius color-blue" >%</div>
     <div @click= "backValue()" class= " btn-70 btn-radius color-red font-14" >←</div>
     <div @click= "inputValue('7')" class= " btn-30 btn-radius clear-marginleft" >7</div>
     <div @click= "inputValue('8')" class= " btn-30 btn-radius" >8</div>
     <div @click= "inputValue('9')" class= " btn-30 btn-radius" >9</div>
     <div @click= "squareValue()" class= " btn-30 btn-radius color-blue font-14" >ײ</div>
     <div @click= "radicalValue()" class= " btn-30 btn-radius color-blue font-12" >√</div>
     <div @click= "inputValue('4')" class= " btn-30 btn-radius clear-marginleft" >4</div>
     <div @click= "inputValue('5')" class= " btn-30 btn-radius" >5</div>
     <div @click= "inputValue('6')" class= " btn-30 btn-radius" >6</div>
     <div @click= "inputValue('×')" class= " btn-30 btn-radius color-blue font-14" >×</div>
     <div @click= "inputValue('÷')" class= " btn-30 btn-radius color-blue font-12" >÷</div>
     <div @click= "inputValue('1')" class= " btn-30 btn-radius clear-marginleft" >1</div>
     <div @click= "inputValue('2')" class= " btn-30 btn-radius" >2</div>
     <div @click= "inputValue('3')" class= " btn-30 btn-radius" >3</div>
     <div @click= "inputValue('+')" class= " btn-30 btn-radius color-blue font-14" >+</div>
     <div @click= "inputValue('-')" class= " btn-30 btn-radius color-blue font-14" >-</div>
     <div @click= "inputValue('0')" class= " btn-70 btn-radius clear-marginleft" >0</div>
     <div @click= "inputValue('.')" class= " btn-30 btn-radius" >.</div>
     <div @click= "calValue()" class= " btn-70 btn-radius color-red font-14" >=</div>
   </btn-list>
</div>
<script>
var calculator = new Vue({
   el: '#calculator' ,
   data:{
     inputShow:{
       value: '0'
     }
   },
   components:{
     'input-box' :{
       props:[ 'inputShow' ],
       computed: {
         value: function () {
           return this .inputShow.value
         }
       },
       template: '<input id="input-box" type="text" size="21" maxlength="21" v-model="value" readonly="readonly">'
     },
     'btn-list' :{
       template: '<div id="btn-list"><slot></slot></div>'
     }
   },
   methods:{
     inputValue(param){
       if (Object.prototype.toString.call( this .inputShow.value) == "[object Number]" ){   //判断输入框内容是否为数字类型
         this .inputShow.value = "0" ;   //数字类型说明是上个计算结果,清空内容
       }
       var str = '' + this .inputShow.value; //输入内容时,将输入框内容转为字符串类型
       var len = str.length;
       var arr = [ "+" , "-" , "×" , "÷" ];
       var num = ( '' +parseFloat(str.split( '' ).reverse().join( '' ))).split( '' ).reverse().join( '' );   //parseInt(str.split('').reverse().join('')))是获取输入框内最后一串数字,再反转回来 ,num为输入框内最后一串数字
       var nlen = num.length;
       if ((num!= '0' && param != '.' )|| (param == '.' && num.indexOf( "." )==-1)){   //输入框内最后一串数字不为0时拼接字符串
         if (arr.indexOf(str.charAt(len-1)) != -1 && arr.indexOf(param) != -1){    //若一开始输入内容为运算符,输入无效
           return ;
         }
         this .inputShow.value += param;   //拼接输入内容
       } else {
         arr.push( "%" );
         if (param == '.' ){      //若num中已有小数点,输入内容为小数点,视为无效
           return ;
         } else if (!(arr.indexOf(param) != -1)){    //判断输入框内最后一个字符不为运算符
           this .inputShow.value =str.substring(0,str.length-nlen) + param;  //输入框内最后一串数字为0时,删除0拼接
         }
       }
     },
     clearValue(){      //清空输入框内容
       this .inputShow.value = '0' ;
     },
     calValue(){       //计算结果
       var str = this .inputShow.value;
       str = str.replace( '×' , '*' ).replace( '÷' , '/' ).replace( '%' , '*0.01' );    //替换运算符
       try {
         this .inputShow.value = eval(str);      //若用户输入内容不符合运算规则,不计算
       } catch (error){
         return ;
       }
     },
     squareValue(){             //平方计算
       var str = this .inputShow.value;
       this .inputShow.value = Math.pow(eval(str),2)
     },
     radicalValue(){             //开根号计算
       var str = this .inputShow.value;
       this .inputShow.value = Math.sqrt(eval(str));
     },
     backValue(){              //删除键,删除单个字符
       var str = this .inputShow.value;
       if (str.length == 1){
         this .inputShow.value = "0" ;
       } else {
          this .inputShow.value = str.slice(0,str.length-1);
       }
     },
     /*oppositeValue(){            //正负号取值
       var str = this.inputShow.value;
       var num = (''+parseInt(str.split('').reverse().join(''))).split('').reverse().join('');   //获取输入框内最后遗传数字
       var nlen = num.length;
       debugger;
       if(!isNaN( parseInt(str.charAt(str.length-1))) && num != 0){  //当输入框末位字符为数字且最后一串数字不为0时,取正负
         this.inputShow.value = str.substring(0,str.length-nlen)+`(-${num})`;
       }
     }*/
   }
})
</script>
</body>
</html>
 
2. CSS部分代码
@charset "utf-8";

body, ul, dl, dd, dt, ol, li, p, h1, h2, h3, h4, h5, h6, textarea, form, select, fieldset, table, td, div, input {
  margin: 0;
  padding: 0;
  -webkit-text-size-adjust: none
}

h1, h2, h3, h4, h5, h6 {
  font-size: 12px;
  font-weight: normal
}

body>div {
  margin: 0 auto
}

div {
  text-align: left
}

a img {
  border: 0
}

body {
  color: #333;
  text-align: center;
  font: 12px "微软雅黑";
}

ul, ol, li {
  list-style-type: none;
  vertical-align: 0
}

a {
  outline-style: none;
  color: #535353;
  text-decoration: none
}

a:hover {
  color: #D40000;
  text-decoration: none
}

.clear {
  height: 0;
  overflow: hidden;
  clear: both
}
/* calculator */
#calculator {
  width: 200px;
  height: 245px;
  padding: 10px;
  border: 1px solid #e5e5e5;
  background: #f8f8f8;
  -moz-border-radius: 3px;
  -webkit-border-radius: 3px;
  border-radius: 3px;
  box-shadow: 0px 0px 10px #f2f2f2;
  -moz-box-shadow: 0px 0px 10px #f2f2f2;
  -webkit-box-shadow: 0px 0px 10px #f2f2f2;
  margin: 40px auto 0 auto;
}

#calculator #input-box {
  margin: 0;
  width: 187px;
  padding: 9px 5px;
  height: 14px;
  border: 1px solid #e5e5e5;
  border-radius: 3px;
  -webkit-border-radius: 3px;
  -moz-border-radius: 3px;
  background: #FFF;
  text-align: right;
  line-height: 14px;
  font-size: 12px;
  font-family: Verdana, Geneva, sans-serif;
  color: #666;
  outline: none;
  text-transform: uppercase;
}

#calculator #btn-list {
  width: 200px;
  overflow: hidden;
}

#calculator #btn-list .btn-radius {
  border-radius: 2px;
  -webkit-border-radius: 2px;
  -moz-border-radius: 2px;
  border: 1px solid #e5e5e5;
  background: -webkit-gradient(linear, 0 0, 0 100%, from(#f7f7f7), to(#ebebeb));
  background: -moz-linear-gradient(top, #f7f7f7,#ebebeb);
  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#f7f7f7,endColorstr=#ebebeb,grandientType=1);
  line-height: 29px;
  text-align: center;
  text-shadow: 0px 1px 1px #FFF;
  font-weight: bold;
  font-family: Verdana, Geneva, sans-serif;
  color: #666;
  float: left;
  margin-left: 11px;
  margin-top: 11px;
  font-size: 12px;
  cursor: pointer;
}

#calculator #btn-list .btn-radius:active {
  background: #ffffff;
}

#calculator #btn-list .clear-marginleft {
  margin-left: 0;
}

#calculator #btn-list .font-14 {
  font-size: 14px;
}

#calculator #btn-list .color-red {
  color: #ff5050
}

#calculator #btn-list .color-blue {
  color: #00b4ff
}

#calculator #btn-list .btn-30 {
  width: 29px;
  height: 29px;
}

#calculator #btn-list .btn-70 {
  width: 70px;
  height: 29px;
}

3. 使用本站HTML/CSS/JS在线运行测试工具http://tools.jb51.net/code/HtmlJsRun,可得到如下测试运行效果:

4. 使用时记得改下css路径,在html中引入vue

5. 博主技术有限,正负号部分功能还有问题待完善.计算器还有一些未知的小Bug,感兴趣的读者可以在这个基础上进行扩展。

原文地址:https://www.jb51.net/article/143623.htm

PS:这里再为大家推荐几款计算工具供大家参考:

在线数学表达式简单转换/计算工具:
http://tools.jb51.net/jisuanqi/exp_jisuanqi

在线一元函数(方程)求解计算工具:
http://tools.jb51.net/jisuanqi/equ_jisuanqi

科学计算器在线使用_高级计算器在线计算:
http://tools.jb51.net/jisuanqi/jsqkexue

在线计算器_标准计算器:
http://tools.jb51.net/jisuanqi/jsq

希望本文所述对大家vue.js程序设计有所帮助。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM