赞
踩
计算器
app.json
文件设置window
配置项pages/index/index.wxml
文件data-val
自定义属性,用于区分不同按钮data-val
自定义属性,用于区分不同按钮data-val
自定义属性,用于区分不同按钮data-val
自定义属性,用于区分不同按钮data-val
自定义属性,用于区分不同按钮<!--index.wxml--> <!-- 结果区域 --> <view class="result"> <!-- 当前计算式 --> <view class="result-sub">{{sub}}</view> <!-- 当前计算结果 --> <view class="resut-num">{{num}}</view> </view> <!-- 按钮区域 --> <view class="btns"> <!-- 第一行按钮 --> <view> <!-- 清除按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnReset">C</view> <!-- 删除按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnDel">DEL</view> <!-- 正负号切换按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnPosNeg">+/-</view> <!-- 除号按钮 (+:Positive,-:Negtive)--> <view hover-class="bg" hover-start-time="50" bind:tap="btnOperate" data-val="÷">÷</view> </view> <!-- 第二行按钮 --> <view> <!-- 7按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="7"></view> <!-- 8按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="8">8</view> <!-- 9按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="9">9</view> <!-- 乘号按钮--> <view hover-class="bg" hover-start-time="50" bind:tap="btnOperate" data-val="×">×</view> </view> <!-- 第三行按钮 --> <view> <!-- 4按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="4">4</view> <!-- 5按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="5">5</view> <!-- 6按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="6">6</view> <!-- 减号按钮--> <view hover-class="bg" hover-start-time="50" bind:tap="btnOperate" data-val="-">-</view> </view> <!-- 第四行按钮 --> <view> <!-- 4按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="1">1</view> <!-- 5按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="2">2</view> <!-- 6按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="3">3</view> <!-- 减号按钮--> <view hover-class="bg" hover-start-time="50" bind:tap="btnOperate" data-val="+">+</view> </view> <!-- 第五行按钮 --> <view> <!-- 0按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnNum" data-val="0">0</view> <!-- 点按钮 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnDot" >.</view> <!-- 等号按钮 —— 进行计算 --> <view hover-class="bg" hover-start-time="50" bind:tap="btnCalculate">=</view> </view> </view>
pages/index/inde.wxss
文件page
样式result
、result-sub
和result-num
.btns
选择器.btns > view
选择器.btns > view > view
选择器.btns > view:last-child > view:first-child
选择器.btns > view:first-child > view:first-child
选择器.btns > view > view:last-child
选择器bg
选择器/**index.wxss**/ /* 页面样式 */ page { height: 100vh; display: flex; flex-direction: column; color: #555; } /* 结果区域样式 */ .result { flex: 1; /* 垂直均分手机屏幕,因为flex-direction:column */ background-color: #f3f6fe; position: relative; } /* 当前计算式样式 */ .result-sub { font-size: 52rpx; position: absolute; bottom: 16vh; right: 3vw; } /* 当前计算结果样式 */ .result-num { font-size: 100rpx; position: absolute; bottom: 3vh; right: 3vw; } /* 按钮区域样式 */ .btns { flex: 1; display: flex; flex-direction: column; font-size: 48rpx; border-top: 1rpx solid #ccc; border-left: 1rpx solid #ccc; } /* 按钮区域每一行的样式 */ .btns > view { flex: 1; display: flex; } /* 按钮区域每一行中每个按钮的样式 */ .btns > view > view { flex-basis: 25%; /* 每个按钮均分一行空间 */ border-right: 1rpx solid #ccc; /* 右边框线 */ border-bottom: 1rpx solid #ccc; /* 底边框线 */ box-sizing: border-box; /* 控制盒模型的尺寸计算方式 */ display: flex; /* 弹性布局,默认是水平方向 */ align-items: center; /* 交叉轴居中 - 垂直居中 */ justify-content: center; /* 主轴居住 - 水平居中 */ } /* 0按钮跨2列,view:first-child ~ view:nth-child(1) */ .btns > view:last-child > view:nth-child(1) { flex-basis: 50%; } /* 清除样式类 */ .btns > view:first-child > view:first-child { color: #f00; } /* 最后一列按钮样式 */ .btns > view > view:last-child { color: #fc8100; } /* 按钮的盘旋样式类 */ .bg { background: #eee; }
utils
目录utlis
目录创建math.js
文件// 精准计算功能,用于解决JavaScript浮点数运算精度不准确的问题 module.exports = { // 加法 add: function (a, b) { var r1, r2, m try { r1 = a.toString().split('.')[1].length } catch (e) { r1 = 0 } try { r2 = b.toString().split('.')[1].length } catch (e) { r2 = 0 } m = Math.pow(10, Math.max(r1, r2)) return (a * m + b * m) / m }, // 减法 sub: function (a, b) { var r1, r2, m, n try { r1 = a.toString().split('.')[1].length } catch (e) { r1 = 0 } try { r2 = b.toString().split('.')[1].length } catch (e) { r2 = 0 } m = Math.pow(10, Math.max(r1, r2)) // 动态控制精度长度 n = (r1 >= r2) ? r1 : r2 return ((a * m - b * m) / m).toFixed(n) }, // 乘法 mul: function (a, b) { var m = 0, s1 = a.toString(), s2 = b.toString() try { m += s1.split('.')[1].length } catch (e) {} try { m += s2.split('.')[1].length } catch (e) {} return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m) }, // 除法 div: function (a, b) { var t1 = 0, t2 = 0, r1, r2 try { t1 = a.toString().split('.')[1].length } catch (e) {} try { t2 = b.toString().split('.')[1].length } catch (e) {} r1 = Number(a.toString().replace('.', '')) r2 = Number(b.toString().replace('.', '')) return (r1 / r2) * Math.pow(10, t2 - t1) } }
utils
目录里创建计算模块 - calc.js
// 引入math.js模块,获取math对象 const math = require('./math.js') // 计算器中的数字处理 module.exports = { target: 'num1', // 表示当前正在输入哪个数字,取num1或num2 num1: '0', // 保存第1个数字 num2: '0', // 保存第2个数字 op: '', // 运算符,值可以是+、-、×、÷ // 设置当前数字 setNum(num) { this[this.target] = num }, // 获取当前数字 getNum() { return this[this.target] }, // 切换到第2个数字 changeNum2() { this.target = 'num2' }, // 重置 reset() { this.num1 = '0' this.num2 = '0' this.target = 'num1' this.op = '' }, // 进行运算 getResult() { let result = 0 if (this.op === '+') { result = math.add(this.num1, this.num2) } else if (this.op === '-') { result = math.sub(this.num1, this.num2) } else if (this.op === '×') { result = math.mul(this.num1, this.num2) } else if (this.op === '÷') { result = math.div(this.num1, this.num2) } return result } }
pages/index/index.js
文件calc.js
文件,获取计算器对象sub
与num
numChangeFlag
、execFlag
、resultFlag
btnNum()
btnOperate()
btnCalculate()
btnReset()
btnDot()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。