您好,欢迎访问一九零五行业门户网

小程序开发之计算器

在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发计算器功能。
本文主要分为两个部分,小程序主体部分及计算器业务页面部分
一、小程序主体部分一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:
1. 小程序逻辑
app({   onlaunch: function() {      // do something initial when launch.  },   onshow: function() {      // do something when show.  },   onhide: function() {      // do something when hide.  },   globaldata: 'i am global data'})
2. 小程序公共设置
{   pages: [     page/index/index   ],   window: {     navigationbarbackgroundcolor: #000,     backgroundcolor: #000,     navigationbarbackgroundcolor: #000   },   networktimeout: {     request: 10000,     connectsocket: 10000,     uploadfile: 10000,     downloadfile: 10000   },   debug: true }
二、计算器页面部分计算器页面主要由以下文件组成。
1. 计算器页面结构
页面结构分为2个主要部分:显示区和键盘区
其中键盘区又分功能键、数字键,及运算键,页面结构如下
<template name="calculator-key">   <button hover-start-time="{{5}}" hover-stay-time="{{20}}" hover-class="calculator-key-hover" data-key="{{classname}}" class="calculator-key {{classname}}">{{display}}</button></template><view class="calculator">   <view class="calculator-display">     <view class="calculator-display-text">{{displayvalue}}</view>   </view>   <view class="calculator-keypad">     <view class="input-keys">       <view class="function-keys" catchtap="ontapfunction">         <template is="calculator-key" data="{{classname: 'key-clear', display: cleardisplay ? 'c' : 'ac'}}"/>         <template is="calculator-key" data="{{classname: 'key-sign', display: '±'}}"/>         <template is="calculator-key" data="{{classname: 'key-percent', display: '%'}}"/>       </view>       /*sdf*/      <view class="digit-keys" catchtap="ontapdigit">         <template is="calculator-key" data="{{classname: 'key-0', display: '0'}}"/>         <template is="calculator-key" data="{{classname: 'key-dot', display: '●'}}"/>         <template is="calculator-key" data="{{classname: 'key-1', display: '1'}}"/>         <template is="calculator-key" data="{{classname: 'key-2', display: '2'}}"/>         <template is="calculator-key" data="{{classname: 'key-3', display: '3'}}"/>         <template is="calculator-key" data="{{classname: 'key-4', display: '4'}}"/>         <template is="calculator-key" data="{{classname: 'key-5', display: '5'}}"/>         <template is="calculator-key" data="{{classname: 'key-6', display: '6'}}"/>         <template is="calculator-key" data="{{classname: 'key-7', display: '7'}}"/>         <template is="calculator-key" data="{{classname: 'key-8', display: '8'}}"/>         <template is="calculator-key" data="{{classname: 'key-9', display: '9'}}"/>       </view>     </view>     <view class="operator-keys" catchtap="ontapoperator">         <template is="calculator-key" data="{{classname: 'key-pide', display: '÷'}}"/>         <template is="calculator-key" data="{{classname: 'key-multiply', display: '×'}}"/>         <template is="calculator-key" data="{{classname: 'key-subtract', display: '−'}}"/>         <template is="calculator-key" data="{{classname: 'key-add', display: '+'}}"/>         <template is="calculator-key" data="{{classname: 'key-equals', display: '='}}"/>     </view>   </view></view>
2. 计算器样式表
样式代码如下所示
@import reset.wxss; page {   font: 100 14px 'roboto'; }.calculator {   width: 100%;   height: 100vh;   background: black;   position: relative;   box-shadow: 0px 0px 20px 0px #aaa;   display: flex;   flex-direction: column;   box-sizing: border-box; }.calculator-display {   background: #1c191c;   flex: 1; }/*todo:解决文本垂直居中问题*/.calculator-display-text {   padding: 0 30px;   font-size: 6em;   color: white;   text-align: right; }.calculator-keypad {   display: flex; }.calculator .function-keys {   display: flex; }.calculator .digit-keys {   background: #e0e0e7;   display: flex;   flex-direction: row;   flex-wrap: wrap-reverse; }.calculator-key-hover {   box-shadow: inset 0px 0px 25vw 0px rgba(0,0,0,0.25); }.calculator-key {   display: block;   width: 25vw;   height: 25vw;   line-height: 25vw;   border-top: 1px solid #777;   border-right: 1px solid #666;   text-align: center;   box-sizing: border-box; }.calculator .function-keys .calculator-key {   font-size: 2em; }.calculator .digit-keys .calculator-key {   font-size: 2.25em; }.calculator .digit-keys .key-0 {   width: 50vw;   text-align: left;   padding-left: 9vw; }.calculator .digit-keys .key-dot {   padding-top: 1em;   font-size: 0.75em; }.calculator .operator-keys .calculator-key {   color: white;   border-right: 0;   font-size: 3em; }.calculator .function-keys {   background: linear-gradient(to bottom, rgba(202,202,204,1) 0%, rgba(196,194,204,1) 100%); }.calculator .operator-keys {   background:  linear-gradient(to bottom, rgba(252,156,23,1) 0%, rgba(247,126,27,1) 100%); }.input-keys {   width: 75%; }.operator-keys {   width: 25%; }
3、 计算器页面逻辑处理
page({   data: {     value: null, // 上次计算后的结果,null表示没有上次计算的结果     displayvalue: '0', // 显示数值     operator: null, // 上次计算符号,null表示没有未完成的计算     waitingforoperand: false // 前一按键是否为计算符号  },   onload: function(options) {    this.calculatoroperations = {      'key-pide': (prevvalue, nextvalue) => prevvalue / nextvalue,      'key-multiply': (prevvalue, nextvalue) => prevvalue * nextvalue,      'key-add': (prevvalue, nextvalue) => prevvalue + nextvalue,      'key-subtract': (prevvalue, nextvalue) => prevvalue - nextvalue,      'key-equals': (prevvalue, nextvalue) => nextvalue     }   },     /* ac操作,一下回到解放前 */   clearall() {    this.setdata({       value: null,       displayvalue: '0',       operator: null,       waitingforoperand: false     })   },  /* 仅清空当前显示的输入值 */   cleardisplay() {    this.setdata({       displayvalue: '0'     })   },   ontapfunction: function(event) {     const key = event.target.dataset.key;    switch(key) {      case 'key-clear':        if (this.data.displayvalue !== '0') {          this.cleardisplay();         } else {          this.clearall();         }        break;      case 'key-sign':        var newvalue = parsefloat(this.data.displayvalue) * -1                 this.setdata({           displayvalue: string(newvalue)         })        break;      case 'key-percent':         const fixeddigits = this.data.displayvalue.replace(/^-?\d*\.?/, '')        var newvalue = parsefloat(this.data.displayvalue) / 100                 this.setdata({           displayvalue: string(newvalue.tofixed(fixeddigits.length + 2))         });        break;               default:        break;     }   },   ontapoperator: function(event) {     const nextoperator = event.target.dataset.key;     const inputvalue = parsefloat(this.data.displayvalue);         if (this.data.value == null) {      this.setdata({         value: inputvalue       });     } else if (this.data.operator) {       const currentvalue = this.data.value || 0;       const newvalue = this.calculatoroperations[this.data.operator](currentvalue, inputvalue);      this.setdata({         value: newvalue,         displayvalue: string(newvalue)       });     }         this.setdata({       waitingforoperand: true,       operator: nextoperator     });   },   ontapdigit: function(event) {     const key = event.target.dataset.key; // 根据data-key标记按键     if(key == 'key-dot') {      // 按下点号       if (!(/\./).test(this.data.displayvalue)) {        this.setdata({           displayvalue: this.data.displayvalue + '.',           waitingforoperand: false         })       }     } else {      // 按下数字键       const digit = key[key.length-1];      if (this.data.waitingforoperand) {        this.setdata({           displayvalue: string(digit),           waitingforoperand: false         })       } else {        this.setdata({           displayvalue: this.data.displayvalue === '0' ? string(digit) : this.data.displayvalue + digit         })       }     }   } })
三、程序效果图
【相关推荐】
1.微信小程序完整源码下载
2.微信小程序demo:知乎日报
以上就是小程序开发之计算器的详细内容。
其它类似信息

推荐信息