在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发计算器功能。
本文主要分为两个部分,小程序主体部分及计算器业务页面部分
一、小程序主体部分一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:
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:知乎日报
以上就是小程序开发之计算器的详细内容。