原文链接:https://mp.weixin.qq.com/s/gYF7GjTRpeZNoKPAPI9aXA

1

概述

前几日QQ群里的朋友问我有没有计算器小程序案例,今天我们说下小程序计算器,然后就分享这样的小案例。希望对大家有所帮助

不多说了,二当家要上图来啦!

快去拿个小板凳,坐等更多更新

注意:如若需要请联系微信geekxz

2

wxml

<view class="content">
 <view class="layout-top">
   <view class="screen">
    {{screenData}}
   </view>
 </view>
 <view class="layout-bottom">
   <view class="btnGroup">
     <view class="item orange" bindtap="clickBtn" id="{{idc}}">С</view>
     <view class="item orange" bindtap="clickBtn" id="{{idb}}">←</view>
     <!--<view class="item orange" bindtap="clickBtn" id="{{idt}}">+/-</view>-->
     <view class="item orange iconBtn" bindtap="history">
         <icon type="{{iconType}}" color="{{iconColor}}" class="icon" size="25"/>
     </view>
     <view class="item orange" bindtap="clickBtn" id="{{idadd}}">+</view>
   </view>
   <view class="btnGroup">
     <view class="item blue" bindtap="clickBtn" id="{{id9}}">9</view>
     <view class="item blue" bindtap="clickBtn" id="{{id8}}">8</view>
     <view class="item blue" bindtap="clickBtn" id="{{id7}}">7</view>
     <view class="item orange" bindtap="clickBtn" id="{{idj}}">-</view>
   </view>
   <view class="btnGroup">
     <view class="item blue" bindtap="clickBtn" id="{{id6}}">6</view>
     <view class="item blue" bindtap="clickBtn" id="{{id5}}">5</view>
     <view class="item blue" bindtap="clickBtn" id="{{id4}}">4</view>
     <view class="item orange" bindtap="clickBtn" id="{{idx}}">×</view>
   </view>
   <view class="btnGroup">
     <view class="item blue" bindtap="clickBtn" id="{{id3}}">3</view>
     <view class="item blue" bindtap="clickBtn" id="{{id2}}">2</view>
     <view class="item blue" bindtap="clickBtn" id="{{id1}}">1</view>
     <view class="item orange" bindtap="clickBtn" id="{{iddiv}}">÷</view>
   </view>
   <view class="btnGroup">
     <view class="item blue zero" bindtap="clickBtn" id="{{id0}}">0</view>
     <view class="item blue" bindtap="clickBtn" id="{{idd}}">.</view>
     <view class="item orange" bindtap="clickBtn" id="{{ide}}">=</view>
   </view>
 </view>
</view>

3

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){
   var id = event.target.id;
   if(id == this.data.idb){  //退格←
     var data = 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();
   }else if(id == this.data.idc){  //清屏C
     this.setData({"screenData":"0"});
     this.data.arr.length = 0;
   }else if(id == this.data.idt){  //正负号+/-
     var data = this.data.screenData;
     if(data == "0"){
         return;
     }
     var firstWord = data.charAt(0);
     if(data == "-"){
       data = data.substr(1);
       this.data.arr.shift();
     }else{
       data = "-" + data;
       this.data.arr.unshift("-");
     }
     this.setData({"screenData":data});
   }else if(id == this.data.ide){  //等于=
     var data = this.data.screenData;
     if(data == "0"){
         return;
     }
     //eval是js中window的一个方法,而微信页面的脚本逻辑在是在JsCore中运行,JsCore是一个没有窗口对象的环境,所以不能再脚本中使用window,也无法在脚本中操作组件                
     //var result = eval(newData);          
     var lastWord = data.charAt(data.length);
     if(isNaN(lastWord)){
       return;
     }
     var num = "";
     var lastOperator = "";
     var arr = this.data.arr;
     var optarr = [];
     for(var i in arr){
       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));
     var result = Number(optarr[0])*1.0;
     console.log(result);
     for(var i=1; i<optarr.length; i++){
       if(isNaN(optarr[i])){
           if(optarr[1] == this.data.idadd){
               result += Number(optarr[i + 1]);
           }else if(optarr[1] == this.data.idj){
               result -= Number(optarr[i + 1]);
           }else if(optarr[1] == this.data.idx){
               result *= Number(optarr[i + 1]);
           }else if(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;
       }
     }
     var sd = this.data.screenData;
     var data;
     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'
   })
 }
})

4   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: 0 10rpx;
   font-weight: bold;
   font-size: 60px;
   box-sizing: border-box;
   border-top: 1px solid #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;
}

以上代码为效果图

文末福利:

福利一:前端,Java,产品经理,微信小程序,Python等100G资源合集大放送:https://www.jianshu.com/p/e8197d4d9880

福利二:微信小程序入门与实战全套详细视频教程。

【领取方法】

关注 【编程微刊】微信公众号:

回复【小程序demo】一键领取130个微信小程序源码demo资源。

回复【领取资源】一键领取前端,Java,产品经理,微信小程序,Python等资源合集100G资源大放送。

强力推荐微信小程序之简易计算器,很适合小白程序员的更多相关文章

  1. 微信小程序开发简易计算器改进版

    微信小程序开发计算器有多种方法,但是大部分代码比较复杂.不容易理解.本案例进行了改进,主要是组件bindtap属性绑定的自定义函数clickBtn(),采用了switch语句,使得代码结构更加清晰,学 ...

  2. 微信小程序< 3 > ~ 微信小程序开源项目合集

    简介 移动开发者想学习微信小程序需要学习一点HTML ,CSS和JS才能够比较快速的上手,参考自己学习Android学习过程,阅读源码是一个很好的方式,所以才收集了一些WeApp的开源项目. awes ...

  3. 微信小程序开源项目库汇总

    最近做了一个微信小程序开源项目库汇总,里面集合了OpenDigg 上的优质的微信小程序开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. UI组件 ...

  4. 微信小程序开源项目库集合

    UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...

  5. 微信小程序一:微信小程序UI组件、开发框架、实用库

    作者:NiceCui 本文谢绝转载,如需转载需征得作者本人同意,谢谢. 本文链接:http://www.cnblogs.com/NiceCui/p/8079095.html 内容持续更新,维护中 邮箱 ...

  6. 微信小程序基础之开源项目库汇总

    awesome-github-wechat-weapp 是由OpenDigg整理并维护的微信小程序开源项目库集合.我们会定期同步OpenDigg上的项目到这里,也欢迎各位提交项目给我们. (链接:ht ...

  7. 微信小程序UI组件、开发框架、实用库...

    UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...

  8. 微信小程序框架集合

    UI组件 weui-wxss ★852 - 同微信原生视觉体验一致的基础样式库 Wa-UI ★122 - 针对微信小程序整合的一套UI库 wx-charts ★105 - 微信小程序图表工具 wema ...

  9. 微信小程序开源

    | UI组件 | | | | | | | | | weui-wxss ★1873 - 同微信原生视觉体验一致的基础样式库 | | | | | | zanui-weapp ★794 - 好用易扩展的小程 ...

随机推荐

  1. Kinect 开发 —— 骨骼追踪进阶(上)

    Kinect传感器核心只是发射红外线,并探测红外光反射,从而可以计算出视场范围内每一个像素的深度值.从深度数据中最先提取出来的是物体主体和形状,以及每一个像素点的游戏者索引信息.然后用这些形状信息来匹 ...

  2. git把本地文件上传到github上的步骤

    1.清除clean 2.返回上一级cd .. 3.克隆仓库地址git clone+地址 4.添加忽悠文件vim .gitignore 5查看cat .gitignore 6.进入到test,并且添加所 ...

  3. 【hihocoder 1378】网络流二·最大流最小割定理

    [Link]:http://hihocoder.com/problemset/problem/1378 [Description] [Solution] 在求完最小割(最大流)之后; 可以在剩余网络中 ...

  4. java / C++ B+树代码

    C++ 代码 #include <> JAVA 代码 package org.test.me.struct; /** * author: shuly * create: 2018-09-1 ...

  5. WIN8.1 上安装 debian8.7 遇到的问题及解决方法

    WIN8.1 上安装 debian8.7 遇到的问题及解决方法 参照百度经验 <win7下硬盘安装debian7> ( http://jingyan.baidu.com/article/8 ...

  6. Flume的核心概念

    Event:一条数据  Client:生产数据,运行在一个独立的线程. Agent  (1)Sources.Channels.Sinks  (2)其他组件:Interceptors.Channel S ...

  7. Filebeat-1.3.1安装和设置(图文详解)(多节点的ELK集群安装在一个节点就好)(以Console Output为例)

    前期博客 Filebeat的下载(图文讲解) 前提 Elasticsearch-2.4.3的下载(图文详解) Elasticsearch-2.4.3的单节点安装(多种方式图文详解) Elasticse ...

  8. 在IE中opacity透明度

    body{ background: red; opacity: 0.5; filter:alpha(opacity=50); } jQuery: if($.support.opacity == tur ...

  9. Linux下基于LDAP统一用户认证的研究

    Linux下基于LDAP统一用户认证的研究                   本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  10. itchat转发指定的微信群里某个用户的发言到指定的群

    复读机功能, 如果有比较多的用户,超出500人,那就得分开至少两个群,如何把一些消息自动复制到另一个群呢. 自动转发指定用户的发言,转发到别的群 # !/usr/bin/env python # -* ...