• 微信小程序-简易计算器


    一、项目概述

    功能:

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

    html界面要在app.json里面注册。

    不注册的话会报错:navigateTo:fail url "pages/index/talkPage" is not in app.json

    注册完毕之后编译,开发工具会自动为你创建一个对应的js和wxss文件,而且js里面会自动搭好基本函数:

    image


    页面如下:

    在这里插入图片描述

    二、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文件注释。

    这里在补充一点样式设计:

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

    代码如下:

    /* pages/cal/index.wxss */
    
    .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 {
      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: ''
        });
      }
    })

    五、总结

    1、计算器最重要注意样式表,JS。

    在JS中要是想数据从前台传到后台通过事件的方式(e),从后台传到前台用data的方式。

    2、主页跳转到计算器页面

    主页index.wxml,增加一个按钮:

    <button  bindtap="OnCalShow" >计算器</button>

    image

    在index.js中增增加

    OnCalShow() {
        wx.navigateTo({
          url: '/pages/cal/index',
        })
      },
    image
  • 相关阅读:
    2018-2-13-win10-uwp-如何让WebView标识win10手机
    2018-2-13-win10-uwp-如何让WebView标识win10手机
    2018-3-22-win10-uwp-设置-HttpClient-浏览器标识
    2018-3-22-win10-uwp-设置-HttpClient-浏览器标识
    2018-2-13-WPF-获得触笔悬停元素上
    2018-2-13-WPF-获得触笔悬停元素上
    ACM-ICPC 2019 山东省省赛总结
    ACM-ICPC 2019 山东省省赛总结
    ACM-ICPC 2019 山东省省赛D Game on a Graph
    ACM-ICPC 2019 山东省省赛D Game on a Graph
  • 原文地址:https://www.cnblogs.com/springsnow/p/12603194.html
Copyright © 2020-2023  润新知