微信小程序项目__简易计算器实现+源代码+注释

一.项目概述

功能:
实现加减乘除
去余(%)
删除(Delete)
全部清空( C)

页面如下:
在这里插入图片描述

二.WXML文件编写

首先我们对计算器页面进行设计,这里我们主要分为两部分,上部分和下部,显示部分分为操作数和操作符。计算器分为五行四列,最外面为纵向布局,里面为横向布局。布局通过样式表操作,
代码如下:

<view class="result"><!-- 当前view表示的是显示部分 -->
<view class="result_num">{{num}}</view>  <!--显示操作数 -->
<view class="result_op">{{op}}</view>  <!--显示操作符 -->
</view>

<view class="btns"> <!-- 当前view表示的是操作部分 -->
   <view>  <!--第一行 -->
      <view hover-class="bg" bindtap="resetBtn">C</view>
      <view hover-class="bg" bindtap="delBtn">DEL</view>
      <view hover-class="bg" bindtap="opBtn" data-val="%">%</view>
      <view hover-class="bg" bindtap="opBtn" data-val="/">÷</view>
   </view>
    <view>  <!--第二行 -->
      <view hover-class="bg" bindtap="numBtn" data-val="7">7</view>
      <view hover-class="bg" bindtap="numBtn" data-val="8">8</view>
      <view hover-class="bg" bindtap="numBtn" data-val="9">9</view>
      <view hover-class="bg" bindtap="opBtn" data-val="*">×</view>
   </view>
    <view>  <!--第三行 -->
      <view hover-class="bg" bindtap="numBtn" data-val="4">4</view>
      <view hover-class="bg" bindtap="numBtn" data-val="5">5</view>
      <view hover-class="bg" bindtap="numBtn" data-val="6">6</view>
      <view hover-class="bg" bindtap="opBtn" data-val="-">-</view>
   </view>
    <view>  <!--第四行 -->
      <view hover-class="bg" bindtap="numBtn" data-val="1">1</view>
      <view hover-class="bg" bindtap="numBtn" data-val="2">2</view>
      <view hover-class="bg" bindtap="numBtn" data-val="3">3</view>
      <view hover-class="bg" bindtap="opBtn" data-val="+">+</view>
   </view>
    <view>  <!--第五行 -->
      <view hover-class="bg" bindtap="numBtn" data-val="0">0</view>
      <view hover-class="bg" bindtap="doBtn">.</view>
      <view hover-class="bg" bindtap="opBtn" data-val="=">=</view>      
   </view>
</view>

三.WXSS文件编写

这里分两部分,计算结果展示区,计算按钮区。可见wxml文件注释
在这里插入图片描述这里在补充一点样式设计:
display:flex 表示弹性布局,block块布局(后面接换行符)
flex:1表示占满剩余空间(flex-grow,flex-shrink,flex-basis的简写)默认值为:0,1,auto, 不伸不缩
flex-direction容器内元素的排列方向(默认横向排列)
1.flex-direction:row;沿水平主轴让元素从左向右排列
此时flex-basis相当于width
2.flex-direction:colimn;沿垂直主轴从上到下排列
此时flex-basis相当于height
3.flex-direction:roe-reverse;沿水平主轴从右向左排列
hover-class 按下去的样式
**box-sizing:border-box;**将边框先计入宽度之内
用于确定准确边框宽度,任何像素都会影响页面效果
**display要设置成flex才能对对齐属性赋值
align-item:**垂直对齐
justify-content水平对齐方式
样式表的设置>符号表示 嵌套级联关系
.btns>view>view
view>view
在这里插入图片描述
代码如下:

.result    /* 结果显示区域的样式 */
{
  flex:1;   /* 弹性填充满*/
  background: #f3f6fe;
  position: relative;
}
.btns       /*操作区域的样式*/
{
  flex:1;
  display: flex;   /*弹性显示结构*/
  flex-direction: column;/*纵向显示*/
  font-size: 17pt;
  border-top:1rpx solid #ccc;
  border-left: 1rpx solid #ccc; 
}
page
{
  display: flex;
  flex-direction: column;
  height: 100%;
}
.btns>view  /*设置btn下面所有view*/
{
  flex:1;
  display: flex;
  flex-direction: row;
}
.btns>view>view
{
  flex-basis: 25%;
  border-right: 1rpx solid #ccc;
  border-bottom:1rpx solid #ccc;
  display: flex;
  align-items:center;
  justify-content: center;
}
.btns>view:last-child>view:first-child
{
  flex-basis: 50%;
}
.bg
{
  background-color: #eee;
}
.result_num
{
  font-size: 17pt;
  position: absolute;
  bottom: 5vh;
  right:3vw;
}
.result_op
{
  font-size: 17pt;
  position: absolute;
  bottom: 1vh;
  right:3vw;
}

四.JS页面设计

主要实现
在这里插入图片描述代码如下:
这块还是比较难理解,所以注释也点,不懂得多体会几遍。


 Page({
  data:{
    num:"",     //前台页面显示的输入数字或者结果
    op:""      //前台页面显示的操作符
  },
  result:null,   //装载计算结果
  isClear:true,   //是否需要清理前面的数字,true是要清理
  numBtn:function(e){
    var num=e.target.dataset.val;  //获取你输入的数字
    if(this.isClear|| this.data.num=="0")  //如果需要清理前面的数字,那么前面的数字就不需要保存
    {
      this.isClear=false;  //将清理标志设置为false,以便连续输入数字
      this.setData({
        num: num
      });
    }
    else
    {
      this.setData({
        num:this.data.num+num   //不清理前面的内容,将输入的内容追加到最后面,这是字符串的连接操作,因为两边都是字符串类型
      });
    }
    
  },
  opBtn:function(e){
    var op=this.data.op; //获取上一次的操作符
    var num=Number(this.data.num); //获取操作数
    this.setData({
      op:e.target.dataset.val
    });
    if(this.isClear)  //当你连续点击操作符的时候,操作无效
    {
      return;
    }
    this.isClear=true;  //设置清理内容标志
    if(this.result==null)  //讲第一次运算设置为当前的操作数
    {
      this.result=num;
      return;
    }
    //运算符的运算
    if(op=="+")
    {
      this.result=cals.add(this.result,num);
     // this.result=this.result+num;  //数字加,因为num是数字类型
    }
    else if (op == "-") 
    { 
      this.result = cals.sub(this.result, num);
      //this.result = this.result - num;
    }
    else if (op == "*") 
    { 
      this.result = cals.mul(this.result, num);
      //this.result = this.result * num;
    }
    else if (op == "/") 
    { 
      this.result = cals.div(this.result, num);
     // this.result = this.result / num;
    }
    else if (op == "%") 
    {
      this.result = this.result % num;
     }
     this.setData({
       num:this.result
     });
  },
  doBtn:function(e){
     if(this.isClear)  //如果直接点击小数点,则显示"0."
     {
       this.setData({
         num:"0."
       });
       this.isClear=false; 
       return;
     }
     if(this.data.num.indexOf(".")>=0)  //查询前面输入的数字中,是否存在小数点
     {
        return;  //如果存在小数点,当前输入无效
     }
     this.setData({
       num:this.data.num+"."
     });
  },
  delBtn:function(e){
     var num=this.data.num.substr(0,this.data.num.length-1);
     this.setData({num:num==""?"0":num});
  },
  resetBtn:function(e){
    this.result=null;
    this.isClear=true;
    this.setData({
      num:'0',
      op:''
    });
  }
})

五总结

计算器最重要注意样式表,JS
在JS中要是想数据从前台传到后台通过事件的方式(e),从后台传到前台用data的方式。

发布了80 篇原创文章 · 获赞 148 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Miracle1203/article/details/105088531