微信小程序——计算器
知识点:
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/ 需要通过开发者工具,来完成小程序创建和代码编辑. 下载安装,运行 ...
随机推荐
- Ubuntu下shell 左侧补零
test_1=1 test=`echo $test_1|awk '{printf("%03d\n",$test_1)}'` 输出为001.
- 正确处理iOS从下方滑出滚动视图
本文提供 Demo下载 在iOS 11开始,从最早的地图应用到最近的捷径,陆续有系统应用使用从下方滑出列表的形式,这种系统提供的圆角风格视图用手势划出和隐藏时非常自然流畅.国内的一些应用也跟进了这种交 ...
- RHEL8注册
安装RHEL后,因为是商用系统,YUM软件仓库是不能使用的,需要注册后才可以使用.个人用户可以去红帽官网申请开发者账户. https://developers.redhat.com/ 有了开发者账户后 ...
- Go语言格式化金额为3个一组隔开
最近在Go语言项目上面遇到了一个金额相关的问题,想更加规范的将金额用逗号隔开3个分为一组,这样显示更专业一点,经过一番努力,找到这个下面这个插件,经过测试发现比较好用,特此分享出来. 第一步先下载一个 ...
- Oracle的Pctfree
1.创建一张表 create table student( student_id number ); 但是在pl/sql中查看却是以下的建表语句: -- Create table create tab ...
- WCF的实现(方式二)
参考他人实现文件传输 [WCF]利用WCF实现上传下载文件服务 服务端: 1.首先新建一个名为FileService的WCF服务库项目,如下图: 2.将Service,IService重命名为File ...
- dbeaver把表数据导出csv时字符串自动加双引号问题解决
背景: mysql 5.7 dbeaver 21.1.4 解决:如下图,括起字符这里设置一个 空格(space)即可: 参考1
- AVL tree rotate
AVL tree single rotate /** * Rotate binary tree node with left child. * For AVL trees, this is a sin ...
- tp5上传图片常规
前端不多说,就是使用input标签的file格式. tp5用request()->file('input的名字')接收图片,是binary格式的数据: $file = request()-> ...
- kotlin inline的缺点
inline关键字修饰的方法,可以在运行时将代码复制到使用处 用来控制打印好用 但有两个缺点: 一.修饰的方法不能太大,行数也不能太多,不然会造成很多重复代码 2.控制打印时,方法的行数最好与使用的行 ...