前几日有人问我有没有计算器小程序案例,今天我们说下小程序计算器,然后就分享这样的小案例。希望对大家有所帮助
不多说了,直接上图!
快去拿个小板凳,坐等更多更新
注意:如若需要请联系微信dukaijie134
wxml
<viewclass="content">
<viewclass="layout-top">
<viewclass="screen">
{{screenData}}
</view>
</view>
<viewclass="layout-bottom">
<viewclass="btnGroup">
<viewclass="item orange"bindtap="clickBtn"id="{{idc}}">С</view>
<viewclass="item orange"bindtap="clickBtn"id="{{idb}}">←</view>
<!--<view class="item orange" bindtap="clickBtn" id="{{idt}}">+/-</view>-->
<viewclass="item orange iconBtn"bindtap="history">
<icontype="{{iconType}}"color="{{iconColor}}"class="icon"size="25"/>
</view>
<viewclass="item orange"bindtap="clickBtn"id="{{idadd}}">+</view>
</view>
<viewclass="btnGroup">
<viewclass="item blue"bindtap="clickBtn"id="{{id9}}">9</view>
<viewclass="item blue"bindtap="clickBtn"id="{{id8}}">8</view>
<viewclass="item blue"bindtap="clickBtn"id="{{id7}}">7</view>
<viewclass="item orange"bindtap="clickBtn"id="{{idj}}">-</view>
</view>
<viewclass="btnGroup">
<viewclass="item blue"bindtap="clickBtn"id="{{id6}}">6</view>
<viewclass="item blue"bindtap="clickBtn"id="{{id5}}">5</view>
<viewclass="item blue"bindtap="clickBtn"id="{{id4}}">4</view>
<viewclass="item orange"bindtap="clickBtn"id="{{idx}}">×</view>
</view>
<viewclass="btnGroup">
<viewclass="item blue"bindtap="clickBtn"id="{{id3}}">3</view>
<viewclass="item blue"bindtap="clickBtn"id="{{id2}}">2</view>
<viewclass="item blue"bindtap="clickBtn"id="{{id1}}">1</view>
<viewclass="item orange"bindtap="clickBtn"id="{{iddiv}}">÷</view>
</view>
<viewclass="btnGroup">
<viewclass="item blue zero"bindtap="clickBtn"id="{{id0}}">0</view>
<viewclass="item blue"bindtap="clickBtn"id="{{idd}}">.</view>
<viewclass="item orange"bindtap="clickBtn"id="{{ide}}">=</view>
</view>
</view>
</view>
js
Page({
data:{
idb:"back",
idc:"clear",
idt:"toggle",
idadd:"+",
id9:"9",
id8:"8",
id7:"7",
idj:"-",
id6:"6",
id5:"5",
id4:"4",
idx:"×",
id3:"3",
id2:"2",
id1:"1",
iddiv:"÷",
id0:"0",
idd:".",
ide:"=",
screenData:"0",
operaSymbo:{"+":"+","-":"-","×":"*","÷":"/",".":"."},
lastIsOperaSymbo:false,
iconType:'waiting_circle',
iconColor:'white',
arr:[],
logs:[]
},
onLoad:function(options){
// 页面初始化 options为页面跳转所带来的参数
},
onReady:function(){
// 页面渲染完成
},
onShow:function(){
// 页面显示
},
onHide:function(){
// 页面隐藏
},
onUnload:function(){
// 页面关闭
},
clickBtn:function(event){
varid=event.target.id;
if(id==this.data.idb){//退格←
vardata=this.data.screenData;
if(data=="0"){
return;
}
data=data.substring(0,data.length-1);
if(data==""||data=="-"){
data=0;
}
this.setData({"screenData":data});
this.data.arr.pop();
}elseif(id==this.data.idc){//清屏C
this.setData({"screenData":"0"});
this.data.arr.length=0;
}elseif(id==this.data.idt){//正负号+/-
vardata=this.data.screenData;
if(data=="0"){
return;
}
varfirstWord=data.charAt(0);
if(data=="-"){
data=data.substr(1);
this.data.arr.shift();
}else{
data="-"+data;
this.data.arr.unshift("-");
}
this.setData({"screenData":data});
}elseif(id==this.data.ide){//等于=
vardata=this.data.screenData;
if(data=="0"){
return;
}
//eval是js中window的一个方法,而微信页面的脚本逻辑在是在JsCore中运行,JsCore是一个没有窗口对象的环境,所以不能再脚本中使用window,也无法在脚本中操作组件
//var result = eval(newData);
varlastWord=data.charAt(data.length);
if(isNaN(lastWord)){
return;
}
varnum="";
varlastOperator="";
vararr=this.data.arr;
varoptarr=[];
for(variinarr){
if(isNaN(arr[i])==false||arr[i]==this.data.idd||arr[i]==this.data.idt){
num+=arr[i];
}else{
lastOperator=arr[i];
optarr.push(num);
optarr.push(arr[i]);
num="";
}
}
optarr.push(Number(num));
varresult=Number(optarr[0])*1.0;
console.log(result);
for(vari=1;i<optarr.length;i++){
if(isNaN(optarr[i])){
if(optarr[1]==this.data.idadd){
result+=Number(optarr[i+1]);
}elseif(optarr[1]==this.data.idj){
result-=Number(optarr[i+1]);
}elseif(optarr[1]==this.data.idx){
result*=Number(optarr[i+1]);
}elseif(optarr[1]==this.data.iddiv){
result/=Number(optarr[i+1]);
}
}
}
//存储历史记录
this.data.logs.push(data+'='+result);
wx.setStorageSync("calclogs",this.data.logs);
this.data.arr.length=0;
this.data.arr.push(result);
this.setData({"screenData":result+""});
}else{
if(this.data.operaSymbo[id]){//如果是符号+-*/
if(this.data.lastIsOperaSymbo||this.data.screenData=="0"){
return;
}
}
varsd=this.data.screenData;
vardata;
if(sd==0){
data=id;
}else{
data=sd+id;
}
this.setData({"screenData":data});
this.data.arr.push(id);
if(this.data.operaSymbo[id]){
this.setData({"lastIsOperaSymbo":true});
}else{
this.setData({"lastIsOperaSymbo":false});
}
}
},
history:function(){
wx.navigateTo({
url:'../history/history'
})
}
})
css
.content{
height:100%;
display:flex;
flex-direction:column;
align-items:center;
background-color:#ccc;
font-family:"Microsoft YaHei";
overflow-x:hidden;
}
.layout-top{
width:100%;
margin-bottom:30rpx;
}
.layout-bottom{
width:100%;
}
.screen{
text-align:right;
width:100%;
line-height:260rpx;
padding:010rpx;
font-weight:bold;
font-size:60px;
box-sizing:border-box;
border-top:1pxsolid#fff;
}
.btnGroup{
display:flex;
flex-direction:row;
flex:1;
width:100%;
height:5rem;
background-color:#fff;
}
.item{
width:25%;
display:flex;
align-items:center;
flex-direction:column;
justify-content:center;
margin-top:1px;
margin-right:1px;
}
.item:active{
background-color:#ff0000;
}
.zero{
width:50%;
}
.orange{
color:#fef4e9;
background:#f78d1d;
font-weight:bold;
}
.blue{
color:#d9eef7;
background-color:#0095cd;
}
.iconBtn{
display:flex;
}
.icon{
display:flex;
align-items:center;
width:100%;
justify-content:center;
}
版权声明:本文为qq_41938853原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。