微信小程序(一)计算器

客官°小女子只卖身不卖艺 2022-01-30 03:55 341阅读 0赞

源码下载:https://download.csdn.net/download/qq_29914837/11189315

一、功能效果图预览

在这里插入图片描述

二、实现案例

1.目录结构
在这里插入图片描述

2. app.json文件

  1. {
  2. "pages": [
  3. "pages/calculator/calculator",
  4. "pages/index/index",
  5. "pages/history/history",
  6. "pages/logs/logs"
  7. ],
  8. "window": {
  9. "backgroundTextStyle": "light",
  10. "navigationBarBackgroundColor": "#fff",
  11. "navigationBarTitleText": "计算器",
  12. "navigationBarTextStyle": "black"
  13. },
  14. "sitemapLocation": "sitemap.json"
  15. }

3 app.wxss文件

  1. /**app.wxss**/
  2. .container {
  3. height: 100%;
  4. display: flex;
  5. flex-direction: column;
  6. align-items: center;
  7. justify-content: space-between;
  8. padding: 200rpx 0;
  9. box-sizing: border-box;
  10. }

4 calculator.js文件

  1. var rpn = require("../../utils/rpn.js");
  2. Page({
  3. /**
  4. * 页面的初始数据
  5. */
  6. data: {
  7. idb: "back",
  8. idc: "clear",
  9. idadd: "+",
  10. id9: "9",
  11. id8: "8",
  12. id7: "7",
  13. idj: "-",
  14. id6: "6",
  15. id5: "5",
  16. id4: "4",
  17. idx: "×",
  18. id3: "3",
  19. id2: "2",
  20. id1: "1",
  21. iddiv: "÷",
  22. id0: "0",
  23. idd: ".",
  24. ide: "=",
  25. screenData: "0",
  26. operaSymbo: {
  27. "+": "+",
  28. "-": "-",
  29. "×": "*",
  30. "÷": "/",
  31. ".": "."
  32. },
  33. iconType: 'waiting_circle',
  34. iconColor: 'white',
  35. logs: []
  36. },
  37. /**
  38. * 生命周期函数--监听页面加载
  39. */
  40. onLoad: function(options) {
  41. },
  42. /**
  43. * 生命周期函数--监听页面初次渲染完成
  44. */
  45. onReady: function() {
  46. },
  47. /**
  48. * 生命周期函数--监听页面显示
  49. */
  50. onShow: function() {
  51. },
  52. /**
  53. * 生命周期函数--监听页面隐藏
  54. */
  55. onHide: function() {
  56. },
  57. /**
  58. * 生命周期函数--监听页面卸载
  59. */
  60. onUnload: function() {
  61. },
  62. /**
  63. * 页面相关事件处理函数--监听用户下拉动作
  64. */
  65. onPullDownRefresh: function() {
  66. },
  67. /**
  68. * 页面上拉触底事件的处理函数
  69. */
  70. onReachBottom: function() {
  71. },
  72. /**
  73. * 用户点击右上角分享
  74. */
  75. onShareAppMessage: function() {
  76. },
  77. clickBtn: function(event) {
  78. var id = event.target.id;
  79. if (id == this.data.idc) { //idc:"clear" 选择 C 清屏
  80. this.setData({
  81. "screenData": "0"
  82. }); //选择 C 显示 0
  83. } else if (id == this.data.idb) { //idb:"back" 选择←
  84. var data = this.data.screenData; //获取显示框内容
  85. if (data == "0") { //显示框数据为0是,默认展示0
  86. data = "0";
  87. } else {
  88. data = data.substring(0, data.length - 1); //获取显示框 前n-1数据
  89. if (data.length == 0) { //数据只有0位时,默认展示0
  90. data = "0";
  91. }
  92. }
  93. this.setData({
  94. "screenData": data
  95. });
  96. } else if (id == this.data.ide) { //ide:"=" 选择=
  97. var data = this.data.screenData; //获取显示框内容
  98. var lastWord = data.charAt(data.length - 1);//获取最后一个字符
  99. if (data == 0 || isNaN(lastWord)) { //判断显示框为0或最后一个字符是否是数值类型不做处理
  100. return;
  101. }
  102. var result = rpn.calCommonExp(data)+"";//调用rpn.js方法,微信小程序不支持eval函数
  103. if (result.indexOf(".")>=0) {
  104. var length = result.split(".")[1].length; //小数点后面字符串
  105. if (length > 10) {
  106. result = Number(result).toFixed(10)+"";
  107. }
  108. }
  109. this.setData({
  110. "screenData": result
  111. });
  112. //存储历史记录
  113. this.data.logs.push(data +"="+ result);
  114. wx.setStorageSync("calclogs", this.data.logs);
  115. } else if (this.data.operaSymbo[id]) { // operaSymbo:+ - * / .
  116. var data = this.data.screenData; //获取显示框内容
  117. var a = data.length;
  118. if (!this.data.operaSymbo[data.charAt(data.length - 1)]) { //判断最后一个字符是否包含在operaSymbo中,存在即不能追加
  119. data = data + id;
  120. }
  121. this.setData({
  122. "screenData": data
  123. });
  124. } else { //选择0到9的值
  125. var data = this.data.screenData;
  126. if (data == "0") {
  127. data = id;
  128. } else {
  129. data = data + id;
  130. }
  131. this.setData({
  132. "screenData": data
  133. });
  134. }
  135. },
  136. history: function () {
  137. wx.navigateTo({
  138. url: '../history/history'
  139. })
  140. }
  141. })

5 calculator.wxml文件

  1. <view class="main-view">
  2. <view class="content">
  3. <view class="screen">
  4. {
  5. {screenData}}
  6. </view>
  7. </view>
  8. <view class="layout-bottom">
  9. <view class="btnGroup">
  10. <view class="item black" bindtap="clickBtn" id="{
  11. {idc}}">С</view>
  12. <view class="item black" bindtap="clickBtn" id="{
  13. {idb}}"></view>
  14. <view class="item black iconBtn" bindtap="history">
  15. <icon type="{
  16. {iconType}}" color="{
  17. {iconColor}}" class="icon" size="25" />
  18. </view>
  19. <view class="item red" bindtap="clickBtn" id="{
  20. {idadd}}">+</view>
  21. </view>
  22. <view class="btnGroup">
  23. <view class="item black" bindtap="clickBtn" id="{
  24. {id7}}">7</view>
  25. <view class="item black" bindtap="clickBtn" id="{
  26. {id8}}">8</view>
  27. <view class="item black" bindtap="clickBtn" id="{
  28. {id9}}">9</view>
  29. <view class="item red" bindtap="clickBtn" id="{
  30. {idj}}"></view>
  31. </view>
  32. <view class="btnGroup">
  33. <view class="item black" bindtap="clickBtn" id="{
  34. {id4}}">4</view>
  35. <view class="item black" bindtap="clickBtn" id="{
  36. {id5}}">5</view>
  37. <view class="item black" bindtap="clickBtn" id="{
  38. {id6}}">6</view>
  39. <view class="item red" bindtap="clickBtn" id="{
  40. {idx}}">×</view>
  41. </view>
  42. <view class="btnGroup">
  43. <view class="item black" bindtap="clickBtn" id="{
  44. {id1}}">1</view>
  45. <view class="item black" bindtap="clickBtn" id="{
  46. {id2}}">2</view>
  47. <view class="item black" bindtap="clickBtn" id="{
  48. {id3}}">3</view>
  49. <view class="item red" bindtap="clickBtn" id="{
  50. {iddiv}}">÷</view>
  51. </view>
  52. <view class="btnGroup">
  53. <view class="item black zero" bindtap="clickBtn" id="{
  54. {id0}}">0</view>
  55. <view class="item black" bindtap="clickBtn" id="{
  56. {idd}}">.</view>
  57. <view class="item red" bindtap="clickBtn" id="{
  58. {ide}}"></view>
  59. </view>
  60. </view>
  61. </view>

6 calculator.wxss文件

  1. .main-view {
  2. height: 100%;
  3. width: 100%;
  4. }
  5. .content {
  6. height: 250rpx;
  7. flex-direction: column;
  8. align-items: center;
  9. background-color: rgb(0, 0, 0);
  10. font-family: "Microsoft YaHei";
  11. overflow-x: hidden;
  12. position:relative;
  13. }
  14. .screen {
  15. text-align: right;
  16. margin-top: 180rpx;
  17. margin-right: 20rpx;
  18. font-weight: bold;
  19. font-size: 50rpx;
  20. color: #fff;
  21. word-wrap:break-word; overflow:hidden;
  22. }
  23. .layout-bottom{
  24. width: 100%;
  25. height: calc(100% - 250rpx);
  26. }
  27. .btnGroup {
  28. display: flex;
  29. flex-direction: row;
  30. flex: 1;
  31. width: 100%;
  32. height: 5rem;
  33. background-color: #fff;
  34. }
  35. .item {
  36. width:25%;
  37. display: flex;
  38. align-items: center;
  39. flex-direction: column;
  40. justify-content: center;
  41. margin-top: 1px;
  42. margin-right: 1px;
  43. border-color: #838485;
  44. }
  45. .item:active {
  46. background-color: #424040;
  47. }
  48. .zero{
  49. width: 50%;
  50. }
  51. .orange {
  52. color: #fef4e9;
  53. background: #f78d1d;
  54. font-weight: bold;
  55. }
  56. .red {
  57. color:#d9eef7;
  58. background-color: #f80606;
  59. }
  60. .black {
  61. color: #fff;
  62. background-color: #838485;
  63. border-style:solid;
  64. border-color: #050505;
  65. border: 0rpx;
  66. }
  67. .iconBtn{
  68. display: flex;
  69. }
  70. .icon{
  71. display: flex;
  72. align-items: center;
  73. width:100%;
  74. justify-content: center;
  75. }

7 history.js文件

  1. // pages/history/history.js
  2. Page({
  3. /**
  4. * 页面的初始数据
  5. */
  6. data: {
  7. },
  8. /**
  9. * 生命周期函数--监听页面加载
  10. */
  11. onLoad: function (options) {
  12. // 页面初始化 options为页面跳转所带来的参数
  13. var logs = wx.getStorageSync('calclogs');
  14. this.setData({ "logs": logs });
  15. },
  16. /**
  17. * 生命周期函数--监听页面初次渲染完成
  18. */
  19. onReady: function () {
  20. },
  21. /**
  22. * 生命周期函数--监听页面显示
  23. */
  24. onShow: function () {
  25. },
  26. /**
  27. * 生命周期函数--监听页面隐藏
  28. */
  29. onHide: function () {
  30. },
  31. /**
  32. * 生命周期函数--监听页面卸载
  33. */
  34. onUnload: function () {
  35. },
  36. /**
  37. * 页面相关事件处理函数--监听用户下拉动作
  38. */
  39. onPullDownRefresh: function () {
  40. },
  41. /**
  42. * 页面上拉触底事件的处理函数
  43. */
  44. onReachBottom: function () {
  45. },
  46. /**
  47. * 用户点击右上角分享
  48. */
  49. onShareAppMessage: function () {
  50. }
  51. })

8 history.wxml文件

  1. <view class="content">
  2. <block wx:for="{
  3. {logs}}" wx:for-item="log">
  4. <view class="item">{
  5. {log}}</view>
  6. </block>
  7. </view>

发表评论

表情:
评论列表 (有 0 条评论,341人围观)

还没有评论,来说两句吧...

相关阅读

    相关 程序开发(

    快速学习的能力是码农的核心竞争力 话说这几天突然被微信小程序刷屏了,趁着还在内测阶段,赶紧先把技能学到手吧。好在之前有过开发前端工程的经验,这样的话上起手来应该不会太难吧,呵