微信小程序-簡易計算器


一、項目概述

功能:

  • 實現加減乘除
  • 去余(%)
  • 刪除(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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM