微信小程序——计算器
知识点:
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/ 需要通过开发者工具,来完成小程序创建和代码编辑. 下载安装,运行 ...
随机推荐
- 用“餐厅打包”的故事说明白Python里面的自定义函数
注:博主并非Python专业程序员,年龄12岁,Python龄不到1岁,才疏学浅,如有错误还请大佬指教! 希望能通过本专栏帮助到一些Python小白! 嗨~大家好!上篇博文咱们说了,万一有一些上万行才 ...
- 杂:python获取所有盘符简单粗暴版
def _test_p_get_all_driver(): l = [] for i in range(97, 123): d = chr(i) + ':\\' ...
- mysql去重保留1条记录
delete from `wuye` where wuye_id in ( select * from ( select wuye_id from `wuye` where wuye_name in ...
- 基于Mybatis Plus的一种查询条件构建方案
! 重要: 遐(瞎)想的思路, 希望各位多多建议 record为jdk17写法, 使用class也不会有问题 背景 身为资深程序员, 上班最重要的事当然是增删改查(bushi). 比如今天, 组长甩给 ...
- sqlalchemy+pandas:错误 'OptionEngine' object has no attribute 'execute','str' object has no attribute '_execute_on_connection'
场景:使用 sqlalchemy+pandas 1. 'OptionEngine' object has no attribute 'execute' import pandas as pd fro ...
- Vue之使用umy-ui库的u-table解决 el-table当存在大量数据时,界面操作卡顿。
提示:一.下面的1. 对应 二.下面的1.:2.则对应2. 错误排查:在使用中如果出现:readding 'style' undefined类似错误的, 可以先排查 u-table中height的值引 ...
- Scrapy之Request函数回调未执行 Filtered offsite request to 'XXX'
在爬取免费代理ip室发现,第一页爬取之后后续的多页爬取没有被解析.在查看调试信息时发现显示 Filtered offsite request to 'www.kuaidaili.com',经网上查找先 ...
- yaml 文件的读取写
yaml 是一种数据格式, 它可以和json数据相互转化 . 自动化测试中一般用于做配置文件或是测试用例. 数据的组成, 两种格式: 1. 字典 2. 列表 Eg. config.yaml serve ...
- ObjectARX2020向导创建项目失败,一直显示创建窗口原因
安装了好多次,查了好多资料,发现是需要将向导的msi文件以管理员权限运行,可以参考下面的链接 https://www.dawnnote.com/237.html
- go标准库之fmt
go标准库之fmt fmt库 Print系列 1. Print 不换行 2. Println 换行 3. Printf 不换行,可以使用格式化占位符 格式化占位符 占位符 说明 通用 --- %v 值 ...