微信小程序实现计算器(含历史记录)
作者:灵魂学者 发布时间:2024-04-17 10:30:20
标签:微信小程序,计算器
本文实例为大家分享了微信小程序实现计算器的具体代码,供大家参考,具体内容如下
1、实现效果图
2、代码编写
index.wxml
<!--author:LHXZ 灵魂学者-->
<!--pages/index/index.wxml-->
<view class="result">
<view class="historyed">|历史记录</view>
<scroll-view scroll-y bindscrolltolower class="historying">
<view wx:for="{{logs}}" wx:key="item" class="h_text">{{item}}</view>
</scroll-view>
<view class="clear" bindtap="clear">清空记录|</view>
<view class="history">{{history}}</view>
<view class="result-num">{{num}}</view>
<view class="result-op">{{op}}</view>
</view>
<view class="btns">
<view>
<view hover-class="bg" bindtap="resetBtn">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="numBtn" data-val="7">7</view>
<view hover-class="bg" bindtap="numBtn" data-val="8">8</view>
<view hover-class="bg" bindtap="numBtn" data-val="9">9</view>
<view hover-class="bg" bindtap="opBtn" data-val="*">×</view>
</view>
<view>
<view hover-class="bg" bindtap="numBtn" data-val="4">4</view>
<view hover-class="bg" bindtap="numBtn" data-val="5">5</view>
<view hover-class="bg" bindtap="numBtn" data-val="6">6</view>
<view hover-class="bg" bindtap="opBtn" data-val="-">-</view>
</view>
<view>
<view hover-class="bg" bindtap="numBtn" data-val="1">1</view>
<view hover-class="bg" bindtap="numBtn" data-val="2">2</view>
<view hover-class="bg" bindtap="numBtn" data-val="3">3</view>
<view hover-class="bg" bindtap="opBtn" data-val="+">+</view>
</view>
<view>
<view hover-class="bg" bindtap="numBtn" 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
/* pages/index/index.wxss author:LHXZ 灵魂学者*/
page {
display: flex;
flex-direction: column;
height: 100%;
color: #555;
}
.result {
flex: 1;
background: #f3f6fe;
position: relative;
}
.result-num {
position: absolute;
font-size: 27pt;
bottom: 5vh;
right: 3vw;
}
.result-op {
font-size: 15pt;
position: absolute;
bottom: 1vh;
right: 3vw;
}
.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 {
flex: 1;
display: flex;
}
.btns > view > view {
flex-basis: 25%;
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;
}
.history{
position: absolute;
top:20rpx;
right:40rpx;
font-size: 2rem;
color: rgb(199, 199, 199);
}
.h_text{
color: rgb(136, 136, 136);
margin-left: 20rpx;
}
.historying{
position: absolute;
top:200rpx;
}
scroll-view{
height: 200rpx;
background-color: rgba(255, 255, 255, 0.5);
}
.historyed{
position: absolute;
top:150rpx;
left: 10rpx;
font-size: 30rpx;
color: gray;
}
.clear{
position: absolute;
top:150rpx;
right: 10rpx;
font-size: 30rpx;
color: blue;
}
index.json
{
"navigationBarBackgroundColor": "#fff",
"navigationBarTitleText": "计算器",
"navigationBarTextStyle": "black",
"usingComponents": {
}
}
index.js
/*author:LHXZ 灵魂学者*/
Page({
/**
* 页面的初始数据
*/
data: {
num: '0',
op: '',
history:'',
logs:[]
},
result: null,
isClear: false,
// 数字按钮事件处理函数
numBtn: 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);
var newOp = e.target.dataset.val
this.setData({
op:newOp
})
if (this.isClear) {
this.setData({
history:this.data.history.substr(0,this.data.history.length-1)+newOp
})
return
}
this.setData({history:this.data.history+''+num+newOp})
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
}else if (op === '=') {
this.result =num
this.setData({
history:num + newOp
})
}
this.setData({
num: this.result + '',
})
// 历史记录
this.data.logs.unshift(this.data.history);
this.setData({
logs:this.data.logs
})
},
// 清空记录
clear:function(){
this.setData({
logs:[]
})
},
// 小数点事件处理函数
dotBtn: function() {
if (this.isClear) {
this.setData({
num: '0.'
})
this.isClear = false
return
}
if (this.data.num.indexOf('.') >= 0) {
return
}
this.setData({
num: this.data.num + '.'
})
},
// DEL按钮处理函数
delBtn: function() {
var num = this.data.num.substr(0, this.data.num.length - 1)
this.setData({
num: num === '' ? '0' : num
})
},
// C按钮事件处理函数
resetBtn: function() {
this.result = null
this.isClear = false
this.setData({
num: '0',
op: '',
history:''
})
}
})
来源:https://blog.csdn.net/weixin_52203618/article/details/124063272


猜你喜欢
- 由于是上线的项目且已经按照数据逻辑去渲染了能看懂的看逻辑吧。有点多效果如图<template> <div class=&q
- 1.定义帕累托图:是一种特殊的直方图, 在项目管理知识体系中属于质量管理的工具。 它可以帮助观众了解哪些因素对结果影响最大。它基于帕累托原则
- 有时候,女神发来一条消息,说约你看电影,她考虑了一下,又撤回了,不约你了…而你又想知道她究竟发了什么,该怎么办?微信防撤回了解一下。环境要求
- 创建触发器。创建触发器语法如下:CREATE TRIGGER trigger_name trigger_time trigger_event
- 1、解压到想要安装的位置,创建my.ini文件my.ini的内容如下[mysql]# 设置mysql客户端默认字符集default-char
- CSS重设就是由于各种浏览器解释CSS样式的初始值有所不同,导致设计师在没有定义某个CSS属性时,不同的浏览器会按照自己的默认值来为没有定义
- 一、MySQL Server层日志简介一个mysql client发起一个连接请求,处理请求的过程如下图所示:MySQL日志是在MySQL
- 日志文件满而造成SQL数据库无法写入文件时,可用两种方法:一种方法:清空日志。1.打开查询分析器,输入命令DUMP TRANSAC
- 网络爬虫,是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。但是当网络爬虫被滥用后,互联网上就出现太多同质的东
- mint19.2 本来pip 和 pip2 对应 python2.7 pip3对应pytho
- 本文实例讲述了Python基于回溯法子集树模板实现8皇后问题。分享给大家供大家参考,具体如下:问题8×8格的国际象棋上摆放八个皇后,使其不能
- 本文实例讲述了Python实现连接postgresql数据库的方法。分享给大家供大家参考,具体如下:python可以通过第三方模块连接pos
- 有别于JS跨域、IFRAME跨域等的常用处理办法,还可以利用P3P来实现跨域。P3P是什么P3P(Platform for Privacy
- 1,下载Yii,站点:http://www.yiiframework.com/download/注意版本,这里是根据Yii1来的,如果是Yi
- 写在前面最近有几个有趣的小想法想实践一下,希望使用低功耗、低成本的硬件跑一些持续性的独立的服务。最初的想法是入手一个树莓派得了,开发板尺寸小
- 前言之前缺乏移动端的经验。一直不知道上拉加载,下拉刷新是怎么实现的。现在正好有个产品有这样一个需求。想了一会没有思路。就去找插件。啥vue-
- 最近服务器很不稳定,于是重装了mysql 和php 服务,但是接着却遇到了很头疼的麻烦。远程连接mysql是总是提示:Lost connec
- 在图像裁剪操作中,opencv和pillow两个库都具有相应的函数,但是这两个库中的函数仅仅能对与图片平行的矩形进行裁剪操作,如果想要对目标
- 引言:在微信小程序里,比如商品展示页面的商品详情会有图片展示,PC端设置的商品详情是PC端的宽度,所以在小程序里图片会显示不全,这时就应该做
- 废话不多说了,直接给大家贴代码了。编写setup.py后$ python setup.py register$ python setup.p