微信小程序现在越来越火爆了,我也看到很多在校大学生都在自学了,那些专门从事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%;
}

有不懂的欢迎下面留言提问

微信小程序入门之计算器相关推荐

  1. 微信小程序入门教程+案例demo

    微信小程序入门教程+案例demo 尊重原创,转载请注明出处:原文查看惊喜更多 http://blog.csdn.net/qq137722697 首先摆在好姿态,--微信小程序开发也就那么回事.你只需要 ...

  2. 微信小程序入门二:底部导航tabBar

    小程序底部导航栏组件tabBar,可以参考下官方的API:tabBar 先看代码 //app.json {"pages":["pages/index/index" ...

  3. 天河微信小程序入门《四》:融会贯通,form表单提交数据库

    天河在阔别了十几天之后终于又回来了.其实这篇文章里的demo是接着(天河微信小程序入门<三>)后面就做了的,但是因为最近在做别的项目,所以就偷懒没有发出来.放到今天来看,从前台提交数据到数 ...

  4. 微信小程序入门---01

    目录 微信小程序入门 一.小程序简介 二.第一个小程序 二.小程序代码的构成 三.WXML模块 四.WXSS 样式 五.JS 逻辑交互 六.组件 七.API 八.WXML 模板语法 - 数据绑定 九. ...

  5. 微信小程序入门之常用组件(04)

    常见组件 重点讲解微信小程序中常见的布局组件 view,text,rich-text,button,image,navigator,icon,swiper, radio,checkbox 等 一.vi ...

  6. 微信小程序入门案例-会议邀请函

    微信小程序入门案例-会议邀请函 涉及内容:地图 目录结构: pages\index\index.wxml <view class="box"><view clas ...

  7. 【零基础微信小程序入门开发一】小程序介绍及环境搭建

    什么是小程序? 微信小程序,小程序的一种,英文名Wechat Mini Program,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或搜一下即可打 ...

  8. 微信小程序入门七登录注册

    上一章介绍了 微信小程序入门六本地缓存和搜索 ,这章介绍小程序的登录注册页面.主要有表单的验证,错误信息的提示,form表单的取值,get / post 请求 ,反馈交互提示框,页面跳转 以及 页面U ...

  9. 微信小程序入门-音乐播放器

    萌新,随便做做,只是了解一下微信小程序,希望可以给看到的胖友一点参考. 之前在网上看到这个人入门四天做完一个,我五天做完了,比他好看,突然有一点自信 然后发现自己特别不乐意重新看自己的代码,总觉得写的 ...

最新文章

  1. oracle 选择最频繁出现之前,5文章数据
  2. sketchup作品_18级园林工程技术专业课程实训作品展
  3. EMC VMAX的磁盘构成,fast policy(重要)
  4. linux 跑天龙八部游戏脚本,求推荐天龙八部脚本(能自动打怪,捡包之类的)
  5. 掀开图片显示介绍的css效果
  6. windows api学习笔记-简单的记事本
  7. 放大器的传递函数_这么酷,采用极致小巧的运算放大器设计麦克风电路!
  8. HDU 2084 数塔
  9. 如何制作个人网站(如何搭建个人博客)
  10. RS485接线的正确原理图,常见的RS485错误接线方式
  11. POJ 3253.Fence Repair
  12. 结构体初始化的四种方法
  13. RabbitMQ之业务场景(四):动态创建,删除队列工具类,拿来即用
  14. 兼容 IE、 FireFox 的 javascript 日历控件 原创作者:寒羽枫(cityhunter172)
  15. 总有些中文情歌,让我莫明的感动了
  16. mysql数据库巡检工作内容_数据库巡检
  17. 隐式转换、IF判断、逻辑【与、或、非】、三目运算的用法(基础)
  18. Visual Studio Code入门笔记
  19. RC ORC Parquet之大数据文件存储格式的一哥之争
  20. 蓝湖切图后如何做成html,如何使用蓝湖 sketch for Mac设置切图?

热门文章

  1. 大学毕业标语计算机学院,大学毕业标语
  2. 中职、中专、技校、职高的一年级、二年级应该叫什么?
  3. PS如何制作裂纹效果
  4. 菜鸟必看:wndows xp进程全解
  5. mac mini 服务器_将Mac Mini用作媒体服务器第1部分
  6. 解决了ConceptDraw PRO 8.0.7.0对中文支持不好的问题
  7. CSS-高度塌陷布局乱问题详解
  8. 新平面视觉:多种艺术风格ai转换技巧
  9. 沟通汇报原则prep
  10. 南师大学生用考研Style鼓舞士气