视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Vue.js实现的计算器功能完整示例
2020-11-27 22:11:43 责编:小采
文档


本文实例讲述了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,感兴趣的读者可以在这个基础上进行扩展。

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程序设计有所帮助。

下载本文
显示全文
专题