微信小程序?qū)崿F(xiàn)簡(jiǎn)易計(jì)算器
一、項(xiàng)目概述
功能:
- 實(shí)現(xiàn)加減乘除
- 去余(%)
- 刪除(Delete)
- 全部清空( C)
html界面要在app.json里面注冊(cè)。
不注冊(cè)的話會(huì)報(bào)錯(cuò):navigateTo:fail url "pages/index/talkPage" is not in app.json
注冊(cè)完畢之后編譯,開發(fā)工具會(huì)自動(dòng)為你創(chuàng)建一個(gè)對(duì)應(yīng)的js和wxss文件,而且js里面會(huì)自動(dòng)搭好基本函數(shù):
頁(yè)面如下:
二、WXML文件編寫
首先我們對(duì)計(jì)算器頁(yè)面進(jìn)行設(shè)計(jì),這里我們主要分為兩部分,上部分和下部,顯示部分分為操作數(shù)和操作符。
計(jì)算器分為五行四列,最外面為縱向布局,里面為橫向布局。布局通過(guò)樣式表操作,
代碼如下:
<view class="result"> <!-- 當(dāng)前view表示的是顯示部分 --> <view class="result_num">{{num}}</view> <!--顯示操作數(shù) --> <view class="result_op">{{op}}</view> <!--顯示操作符 --> </view> <view class="btns"> <!-- 當(dāng)前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文件編寫
這里分兩部分,計(jì)算結(jié)果展示區(qū),計(jì)算按鈕區(qū)??梢妛xml文件注釋。
這里在補(bǔ)充一點(diǎn)樣式設(shè)計(jì):
- display:flex 表示彈性布局,block塊布局(后面接換行符)
flex:1表示占滿剩余空間(flex-grow,flex-shrink,flex-basis的簡(jiǎn)寫)默認(rèn)值為:0,1,auto, 不伸不縮 - flex-direction:容器內(nèi)元素的排列方向(默認(rèn)橫向排列)
1.flex-direction:row;沿水平主軸讓元素從左向右排列。此時(shí)flex-basis相當(dāng)于width。
2.flex-direction:colimn;沿垂直主軸從上到下排列。此時(shí)flex-basis相當(dāng)于height
3.flex-direction:roe-reverse;沿水平主軸從右向左排列 - hover-class: 按下去的樣式
- **box-sizing:border-box;**將邊框先計(jì)入寬度之內(nèi),用于確定準(zhǔn)確邊框?qū)挾?,任何像素都?huì)影響頁(yè)面效果
- align-items:**垂直對(duì)齊,**display要設(shè)置成flex才能對(duì)齊屬性賦值
- justify-content:水平對(duì)齊方式
- 樣式表的設(shè)置“>”符號(hào):表示嵌套級(jí)聯(lián)關(guān)系
.btns>view>view
view>view - 視口單位
代碼如下:
/* pages/cal/index.wxss */ .result { flex: 1; /* 彈性填充滿*/ background: #f3f6fe; position: relative; } .btns { flex: 1; display: flex; /*彈性顯示結(jié)構(gòu)*/ 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頁(yè)面設(shè)計(jì)
主要實(shí)現(xiàn)
代碼如下:
Page({ data: { num: "", //前臺(tái)頁(yè)面顯示的輸入數(shù)字或者結(jié)果 op: "" //前臺(tái)頁(yè)面顯示的操作符 }, result: null, //裝載計(jì)算結(jié)果 isClear: true, //是否需要清理前面的數(shù)字,true是要清理 numBtn: function(e) { var num = e.target.dataset.val; //獲取你輸入的數(shù)字 if (this.isClear || this.data.num == "0") //如果需要清理前面的數(shù)字,那么前面的數(shù)字就不需要保存 { this.isClear = false; //將清理標(biāo)志設(shè)置為false,以便連續(xù)輸入數(shù)字 this.setData({ num: num }); } else { this.setData({ num: this.data.num + num //不清理前面的內(nèi)容,將輸入的內(nèi)容追加到最后面,這是字符串的連接操作,因?yàn)閮蛇叾际亲址愋? }); } }, opBtn: function(e) { var op = this.data.op; //獲取上一次的操作符 var num = Number(this.data.num); //獲取操作數(shù) this.setData({ op: e.target.dataset.val }); if (this.isClear) //當(dāng)你連續(xù)點(diǎn)擊操作符的時(shí)候,操作無(wú)效 { return; } this.isClear = true; //設(shè)置清理內(nèi)容標(biāo)志 if (this.result == null) //講第一次運(yùn)算設(shè)置為當(dāng)前的操作數(shù) { this.result = num; return; } //運(yùn)算符的運(yùn)算 if (op == "+") { // this.result = cals.add(this.result, num); this.result = this.result + num; //數(shù)字加,因?yàn)閚um是數(shù)字類型 } 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) //如果直接點(diǎn)擊小數(shù)點(diǎn),則顯示"0." { this.setData({ num: "0." }); this.isClear = false; return; } if (this.data.num.indexOf(".") >= 0) //查詢前面輸入的數(shù)字中,是否存在小數(shù)點(diǎn) { return; //如果存在小數(shù)點(diǎn),當(dāng)前輸入無(wú)效 } 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: '' }); } })
五、總結(jié)
1、計(jì)算器最重要注意樣式表,JS。
在JS中要是想數(shù)據(jù)從前臺(tái)傳到后臺(tái)通過(guò)事件的方式(e),從后臺(tái)傳到前臺(tái)用data的方式。
2、主頁(yè)跳轉(zhuǎn)到計(jì)算器頁(yè)面
主頁(yè)index.wxml,增加一個(gè)按鈕:
<button bindtap="OnCalShow" >計(jì)算器</button>
在index.js中增增加
OnCalShow() { wx.navigateTo({ url: '/pages/cal/index', }) }
到此這篇關(guān)于微信小程序?qū)崿F(xiàn)簡(jiǎn)易計(jì)算器的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
簡(jiǎn)單聊聊JavaScript中的事件循環(huán)
js的事件循環(huán)(event-loop)是我們前端學(xué)習(xí)中非常重要的一部分,也是面試中經(jīng)常被問(wèn)到的點(diǎn),這篇文章我們就來(lái)給大家著重講解一下吧2023-02-02詳解JavaScript原型對(duì)象的this指向問(wèn)題
這篇文章主要為大家介紹了JavaScript原型對(duì)象的this指向問(wèn)題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助2021-11-11詳解JavaScript UTC時(shí)間轉(zhuǎn)換方法
這篇文章主要介紹了JavaScript UTC時(shí)間轉(zhuǎn)換方法,介紹了本地時(shí)間到UTC時(shí)間的轉(zhuǎn)換、UTC日期到本地日期的轉(zhuǎn)換,感興趣的小伙伴們可以參考一下2016-01-01JavaScript實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊后層展開效果的方法
這篇文章主要介紹了JavaScript實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊后層展開效果的方法,可實(shí)現(xiàn)點(diǎn)擊文字緩慢展開層的效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-05-05JS二級(jí)菜單不同實(shí)現(xiàn)方法分析【4種方法】
這篇文章主要介紹了JS二級(jí)菜單不同實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了4種不同的二級(jí)下拉菜單實(shí)現(xiàn)方法,需要的朋友可以參考下2018-12-12JS中Json數(shù)據(jù)的處理和解析JSON數(shù)據(jù)的方法詳解
JSON (JavaScript Object Notation)一種簡(jiǎn)單的數(shù)據(jù)格式,比xml更輕巧,這篇文章主要介紹了JS中Json數(shù)據(jù)的處理和解析JSON數(shù)據(jù)的方法詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-06-06