微信小程序入门之计算器
微信小程序现在越来越火爆了,我也看到很多在校大学生都在自学了,那些专门从事APP开发,网页开发的工作者更是看到了小程序的前景,在小程序领域也掺上一脚,本人也是自学小程序的,初期跟很多人一样,遇到一些不懂的想问问别人,到贴吧去,一大堆广告,根本没人帮忙解决问题。
今天教一些刚入门的同学做一款计算器,如果C语言是编程的最佳入门语言,那计算器应该算得上是小程序的入门demo了,希望刚入门的同学们认真品味下面的代码,从wxml到js,再到wxss(页面的布局),每个代码都要弄懂他的意思
废话不多说,先上效果图,这是我入门时候自己做的一款计算器,很简单,逻辑也很单一,只是我们身边最常见的计算器的逻辑,我觉得从这个demo我更深刻学习到了wxss页面的布局知识
代码附上:
app.json
{"pages":["pages/index/index","pages/logs/logs"],"window":{"navigationBarBackgroundColor": "#000000","navigationBarTextStyle": "white", "navigationBarTitleText": "智能计算器"},"tabBar": { //补充说一下,我这个tabBar是用来设置底部tab的"color":"#ff69b4","selectedColor":"#0000ff","backgroundColor":"#ffff00","list": [{"pagePath": "pages/index/index","text": "计 算 机"},{"pagePath": "pages/logs/logs","text": "日志"},{"pagePath":"pages/logs/logs","text":"回家"}]
}
}
/*app.wxss/*
.container {height: 100%;display: flex;flex-direction: column;align-items: center;justify-content: space-between;padding: 200rpx 0;box-sizing: border-box;
}
**其中一些组件不认识的话, 建议到微信小程序官网多看几遍
https://developers.weixin.qq.com/miniprogram/dev/framework/config.html**
index.wxml:
<template name="calculator-key"><button hover-start-time="{{5}}" hover-stay-time="{{100}}" 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' : 'C'}}"/><template is="calculator-key" data="{{className: 'key-sign', display: '+/-'}}"/><template is="calculator-key" data="{{className: 'key-percent', display: '%'}}"/></view><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-divide', 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>
index.js:
Page({data: {value: null, // 上次计算后的结果,null表示没有上次计算的结果displayValue: '0', // 显示数值operator: null, // 上次计算符号,null表示没有未完成的计算waitingForOperand: false // 前一按键是否为计算符号},onLoad: function (options) {this.calculatorOperations = {'key-divide': (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) * -1this.setData({displayValue: String(newValue)})break;case 'key-percent':const fixedDigits = this.data.displayValue.replace(/^-?\d*\.?/, '')var newValue = parseFloat(this.data.displayValue) / 100this.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})}}}
})
index.wxss:
page {height:100%;
}.calculator {width: 100%;height: 100vh;border:solid 1px;background: rgb(238, 5, 5);position: relative;box-shadow: 0px 0px 20px 0px rgb(211, 41, 41);display: flex;flex-direction: column;box-sizing: border-box;
}.calculator-display { /*显示器背景颜色*/background: #2c2a2c;flex: 1;
}/*TODO:解决文本垂直居中问题,显示器数字颜色*/
.calculator-display-text {padding: 0 30px;font-size: 3em;color: rgb(245, 245, 248);text-align: right;
}.calculator-keypad {display: flex;}.calculator .function-keys {display: flex;color:rgb(245, 13, 13);}.calculator .digit-keys {background: #0808f7;display: flex;flex-direction: row;flex-wrap: wrap-reverse;
}.calculator-key-hover { /*按钮按下以后的颜色*/box-shadow: inset 0px 0px 25vw 0px hsla(71, 90%, 48%, 0.898);
}.calculator-key {
background-color:aqua;display: block;width: 25vw;height: 25vw;line-height: 25vw;border-top: 1px solid rgb(6, 245, 78);border-right: 1px solid rgb(19, 241, 12);text-align: center;box-sizing: border-box;
}.calculator .function-keys .calculator-key {font-size: 2em;}.calculator .digit-keys .calculator-key {font-size: 3em;
}.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: rgb(248, 165, 10);border-right: 0;font-size: 3em;
}.calculator .function-keys {background: linear-gradient(to bottom, rgb(6, 6, 240) 0%, rgb(52, 5, 240) 100%);
}.calculator .operator-keys {background: linear-gradient(to bottom, rgba(252,156,23,1) 0%, rgba(247,126,27,1) 100%);
}.input-keys {width: 100%;
}.operator-keys {width: 100%;
}
有不懂的欢迎下面留言提问
微信小程序入门之计算器相关推荐
- 微信小程序入门教程+案例demo
微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...
- 微信小程序入门二:底部导航tabBar
小程序底部导航栏组件tabBar,可以参考下官方的API:tabBar 先看代码 //app.json {"pages":["pages/index/index" ...
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库
天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...
- 微信小程序入门---01
目录 微信小程序入门 一.小程序简介 二.第一个小程序 二.小程序代码的构成 三.WXML模块 四.WXSS 样式 五.JS 逻辑交互 六.组件 七.API 八.WXML 模板语法 - 数据绑定 九. ...
- 微信小程序入门之常用组件(04)
常见组件 重点讲解微信小程序中常见的布局组件 view,text,rich-text,button,image,navigator,icon,swiper, radio,checkbox 等 一.vi ...
- 微信小程序入门案例-会议邀请函
微信小程序入门案例-会议邀请函 涉及内容:地图 目录结构: pages\index\index.wxml <view class="box"><view clas ...
- 【零基础微信小程序入门开发一】小程序介绍及环境搭建
什么是小程序? 微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或搜一下即可打 ...
- 微信小程序入门七登录注册
上一章介绍了 微信小程序入门六本地缓存和搜索 ,这章介绍小程序的登录注册页面.主要有表单的验证,错误信息的提示,form表单的取值,get / post 请求 ,反馈交互提示框,页面跳转 以及 页面U ...
- 微信小程序入门-音乐播放器
萌新,随便做做,只是了解一下微信小程序,希望可以给看到的胖友一点参考. 之前在网上看到这个人入门四天做完一个,我五天做完了,比他好看,突然有一点自信 然后发现自己特别不乐意重新看自己的代码,总觉得写的 ...
最新文章
- oracle 选择最频繁出现之前,5文章数据
- sketchup作品_18级园林工程技术专业课程实训作品展
- EMC VMAX的磁盘构成,fast policy(重要)
- linux 跑天龙八部游戏脚本,求推荐天龙八部脚本(能自动打怪,捡包之类的)
- 掀开图片显示介绍的css效果
- windows api学习笔记-简单的记事本
- 放大器的传递函数_这么酷,采用极致小巧的运算放大器设计麦克风电路!
- HDU 2084 数塔
- 如何制作个人网站(如何搭建个人博客)
- RS485接线的正确原理图,常见的RS485错误接线方式
- POJ 3253.Fence Repair
- 结构体初始化的四种方法
- RabbitMQ之业务场景(四):动态创建,删除队列工具类,拿来即用
- 兼容 IE、 FireFox 的 javascript 日历控件 原创作者:寒羽枫(cityhunter172)
- 总有些中文情歌,让我莫明的感动了
- mysql数据库巡检工作内容_数据库巡检
- 隐式转换、IF判断、逻辑【与、或、非】、三目运算的用法(基础)
- Visual Studio Code入门笔记
- RC ORC Parquet之大数据文件存储格式的一哥之争
- 蓝湖切图后如何做成html,如何使用蓝湖 sketch for Mac设置切图?