微信小程序——计算器
知识点:
wxml:
hover-class: 实现点击态效果 hover-class样式显示的原理是 点击时把样式加到class的样式中,冲突时,谁在后面就显示谁!
data-val: 用于传数据,e.target.dataset.val调用
js:
Number()会得到数字(整数,小数)或者NaN; parseInt()会得到 整数或者NaN,不会有小数的情况
stringObject.substr(start,length):substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
string.indexOf("ABC"):返回大于等于0的整数值则表示包含此字符串,若不包含则返回-1
index.wxml:
<!--index.wxml-->
<view class="result">
<view class="result-num">{{num}}</view>
<view class="result-op">{{op}}</view>
</view> <view class="btns">
<view>
<!-- hover-class,实现点击态效果
hover-class样式显示的原理是 点击时把样式加到class的样式中,冲突时,谁在后面就显示谁!
data-val:用于传数据,e.target.dataset.val调用
-->
<view hover-class="bg" bindtap="resultBtn">C</view>
<view hover-class="bg" bindtap="delBtn">DEL</view>
<view hover-class="bg" bindtap="opBtn" data-val="%">%</view>
<view hover-class="bg" bindtap="opBtn" data-val="/">÷</view>
</view>
<view>
<view hover-class="bg" bindtap="numtBtn" data-val="7">7</view>
<view hover-class="bg" bindtap="numtBtn" data-val="8">8</view>
<view hover-class="bg" bindtap="numtBtn" data-val="9">9</view>
<view hover-class="bg" bindtap="opBtn" data-val="*">×</view>
</view>
<view>
<view hover-class="bg" bindtap="numtBtn" data-val="4">4</view>
<view hover-class="bg" bindtap="numtBtn" data-val="5">5</view>
<view hover-class="bg" bindtap="numtBtn" data-val="6">6</view>
<view hover-class="bg" bindtap="opBtn" data-val="-">-</view>
</view>
<view>
<view hover-class="bg" bindtap="numtBtn" data-val="1">1</view>
<view hover-class="bg" bindtap="numtBtn" data-val="2">2</view>
<view hover-class="bg" bindtap="numtBtn" data-val="3">3</view>
<view hover-class="bg" bindtap="opBtn" data-val="+">+</view>
</view>
<view>
<view hover-class="bg" bindtap="numtBtn" data-val="0">0</view>
<view hover-class="bg" bindtap="dotBtn">.</view>
<view hover-class="bg" bindtap="opBtn" data-val="=">=</view>
</view>
</view>
index.wxss
/**index.wxss**/
/* 上下切分 */
page{ display: flex; /* 弹性布局 */
flex-direction: column; /* 设置子元素的排列方向 */
height: 100%;
}
.result{
flex: 1;
background: #f3f6fe;
}
.btns{
flex: 1;
}
/* ---------------------------------------- */ /* 键盘样式 */
.bg{
background:#eee;
}
.btns{
flex: 1;
display: flex;
flex-direction: column;
font-size: 17pt;
border-top: 1rpx solid #ccc;
border-left: 1rpx solid #ccc;
}
.btns > view{ /* 这里的view纵向排列*/
flex: 1;
display: flex; /* 设置为弹性布局 */
}
.btns > view > view{ /* 这里的view横向排列*/
flex-basis: 25%; /*flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。*/
border-right: 1rpx solid #ccc;
border-bottom: 1rpx solid #ccc;
box-sizing: border-box;
display: flex;
align-items: center; /* 垂直居中 */
justify-content: center; /* 水平居中 */
}
.btns > view:last-child>view:first-child{
flex-basis: 50%;
}
.btns > view:first-child>view:first-child{ /* 第一行的第一个元素*/
color: #f00;
}
.btns > view >view:last-child{ /*每一行的最后一个元素*/
color: #fc8e00;
}
/* ------------------------------ */ /* 显示器样式 :数字、运算符显示的位置*/
.result{
flex: 1;
background: #f3f6fe;
position: relative;
}
.result-num{
position: absolute;
font-size: 27pt;
bottom: 5vh;
right: 3vw;
}
.result-op{
font-size: 20pt;
position: absolute;
bottom: 1vh; /* vh:视窗高度,1vh等于视窗高度的1% ; 视窗高度固定为100vh*/
right: 3vw; /* vw 视窗宽度,1vw等于视窗宽度的1% ; 视窗宽度度固定为100wh*/
}
index.json
{
"navigationBarBackgroundColor":"#fff",
"navigationBarTitleText":"计算器",
"navigationBarTextStyle":"black",
"usingComponents": {}
}
index.js
// index.js
// 获取应用实例
const app = getApp() Page({
data: {
num:"1",
op:"+"
}, result:null,
isClear:false, /*true:替换当前数字 false:新数字接在当前数字末尾 */ numtBtn:function(e){
var num = e.target.dataset.val if(this.data.num == '0' || this.isClear){
// 数字替换
this.setData({num:num})
this.isClear = false
}else{
// 数字拼接
this.setData({num:this.data.num + num})
}
}, opBtn:function(e){
var op = this.data.op //取出用户上一次输入的运算符
var num = Number(this.data.num) //Number()会得到数字(整数,小数)或者NaN; parseInt()会得到 整数或者NaN,不会有小数的情况
this.setData({op:e.target.dataset.val}) // 赋值这一次用户输入的运算符
if(this.isClear){
return
}
this.isClear = true if(this.result == null){
this.result = num
return
} if(op == '+'){
this.result = this.result + num
}else if(op == '-'){
this.result = this.result - num
}else if(op == '*'){
this.result = this.result * num
}else if(op == '/'){
this.result = this.result / num
}else if(op == '%'){
this.result = this.result % num
}
this.setData({num:this.result + ''}) // 数字转换为字符串
}, dotBtn:function(){
if(this.isClear){
this.setData({num:'0.'})
this.isClear = false
return
}
if(this.data.num.indexOf('.') >= 0){ //string.indexOf("ABC"):返回大于等于0的整数值则表示包含此字符串,若不包含则返回-1
return
}
this.setData({num:this.data.num + '.'})
}, delBtn: function(){
// stringObject.substr(start,length) :substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。
var num = this.data.num.substr(0, this.data.num.length - 1)
this.setData({num:num == '' ? '0' : num})
}, resultBtn: function(){
this.result = null
this.isClear = false
this.setData({num: '0', op:''})
}, })
效果

微信小程序——计算器的更多相关文章
- 微信小程序计算器Bug版=-=(笔记)
微信小程序计算器BUG版本 无APPID的测试号登录,先在app.json中更改路径,以及修改头部信息. 首先一个输入框字段用{{screenData}} 功能可以退格,清屏,正负号,正常操作加减乘除 ...
- 微信小程序计算器后后续
改的眼睛都要瞎了,总算是知道问题出哪了 最后一段 在等号里面计算输入的数组,这个判断的主要操作是将输入的数据的数组进行数和符号的拆分然后再计算,把数按字符串输入数组,然后将数和符号进行拆分 ,最后通过 ...
- 微信小程序计算器模拟后续
今天按着自己的思路又重打了一遍 wxml没什么说的,就是分块起名,显示数字和结果的作为屏幕,数字键盘一行四块 <view class="onTop"> <view ...
- 近期热门微信小程序demo源码下载汇总
近期微信小程序demo源码下载汇总,乃小程序学习分析必备素材!点击标题即可下载: 即速应用首发!原创!电商商场Demo 优质微信小程序推荐 -秀人美女图 图片下载.滑动翻页 微信小程序 - 新词 GE ...
- 剖析简易计算器带你入门微信小程序开发
写在前面,但是重点在后面 这是教程,也不是教程. 可以先看Demo的操作动图,看看是个什么玩意儿,GitHub地址(https://github.com/dunizb/wxapp-sCalc) 自从微 ...
- 微信小程序开发(2) 计算器
在这篇微信小程序开发教程中,我们将介绍如何使用微信小程序开发计算器功能. 本文主要分为两个部分,小程序主体部分及计算器业务页面部分 一.小程序主体部分 一个小程序主体部分由三个文件组成,必须放在项目的 ...
- 微信小程序-简易计算器
代码地址如下:http://www.demodashi.com/demo/14210.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...
- 强力推荐微信小程序之简易计算器,很适合小白程序员
原文链接:https://mp.weixin.qq.com/s/gYF7GjTRpeZNoKPAPI9aXA 1 概述 前几日QQ群里的朋友问我有没有计算器小程序案例,今天我们说下小程序计算器,然后就 ...
- 微信小程序开发简易计算器改进版
微信小程序开发计算器有多种方法,但是大部分代码比较复杂.不容易理解.本案例进行了改进,主要是组件bindtap属性绑定的自定义函数clickBtn(),采用了switch语句,使得代码结构更加清晰,学 ...
- 微信小程序入门学习-- 简易Demo:计算器
简单学习下微信小程序 官网 简易教程 · 小程序 https://mp.weixin.qq.com/debug/wxadoc/dev/ 需要通过开发者工具,来完成小程序创建和代码编辑. 下载安装,运行 ...
随机推荐
- 19.内容提供者ContentProvider
之前我们学习了Android数据持久化的技术,包括文件存储(内部存储).SharedPreferences存储以及数据库存储. 这些持久化技术所保存的数据基本都是在当前应用程序中访问. Android ...
- python 操作 ES 一、基础操作
示例代码环境 python:3.8 es:7.8.0环境安装 pip install elasticsearch==7.8.0 from elasticsearch import Elasticsea ...
- python随机数模拟
`#随机数 import random red = range(1,36,1) red_target_list=[] i=1 while i< 6: red_ran_index=random.r ...
- 【java】MVC模式和三层架构
MVC是一种分层开发的模式 M:Model,业务模型,处理业务,存储数据,获取数据.JavaBean对象 V: View , 视图,界面展示,展示数据.JSP或HTML C: Controller, ...
- 操作系统实战45讲笔记- 07 Cache与内存:程序放在哪儿?
程序局部性原理: CPU 大多数时间在执行相同的指令或者与此相邻的指令 时间局部性VS空间局部性: a. 时间局部性:当前访问的指令或数据,也可能在之后访问: b. 空间局部性:当程序访问内存地址x时 ...
- SpannableString 设置文字中的颜色 链接
SpannableString spannableString = new SpannableString(matchResult); int index = matchResult.indexOf( ...
- JSON中put、accumulate、elemate的区别
JSONObject.put():将value映射到key下,加入在JSONObject对象之前存在一个value存在key下,当前的value会替换之前的value. JSONObject.accu ...
- 邮件合并 :处理ACCESS中批量查询语句的运行
利用邮件合并,制作批量查询语句,一条一条的复制粘贴并运行. 有点笨但是想不出什么好办法,除非用模块的过程,但还是要手动输入参数.http://www.docin.com/p-695725657.htm ...
- JavaScript的原型和原型链
说到JavaScript的原型和原型链,相关文章已有不少,但是大都晦涩难懂.本文将换一个角度出发,先理解原型和原型链是什么,有什么作用,再去分析那些令人头疼的关系. 一.引用类型皆为对象 原型和原型链 ...
- Markdown 基础语法 备忘录
在vscode中使用Markdown先要安装一些插件: Markdown Preview Enhanced Paste Image LimfxCodeEX Code Spell Checker 一级标 ...