微信小程序 计算器(附源码链接)

一、界面

1、主要界面:基本计算


2、扩展界面:单位计算


3、其它界面

房贷计算、正则表达式等,具体可扫码试用


二、代码:

1、主界面

index.js

Page({

data: {

idb: “back”,

idc: “clear”,

idt: “toggle”,

idadd: “+”,

id9: “9”,

id8: “8”,

id7: “7”,

idj: “-”,

id6: “6”,

id5: “5”,

id4: “4”,

idx: “×”,

id3: “3”,

id2: “2”,

id1: “1”,

iddiv: “÷”,

id0: “0”,

idd: “.”,

ide: “=”,

screenData: “0”,

operaSymbo: { “+”: “+”, “-”: “-”, “×”: “*”, “÷”: “/”, “.”: “.” },

lastIsOperaSymbo: false,

iconType: ‘waiting_circle’,

iconColor: ‘white’,

arr: [],

logs: []

},

onLoad: function (options) {

// 页面初始化 options为页面跳转所带来的参数

},

onReady: function () {

// 页面渲染完成

},

onShow: function () {

// 页面显示

},

onHide: function () {

// 页面隐藏

},

onUnload: function () {

// 页面关闭

},

clickBtn: function (event) {

var id = event.target.id;

if (id == this.data.idb) { //退格←

var data = this.data.screenData;

if (data == “0”) {

return;

}

data = data.substring(0, data.length - 1);

if (data == “” || data == “-”) {

data = 0;

}

this.setData({ “screenData”: data });

this.data.arr.pop();

} else if (id == this.data.idc) { //清屏C

this.setData({ “screenData”: “0” });

this.data.arr.length = 0;

} else if (id == this.data.idt) { //正负号+/-

var data = this.data.screenData;

if (data == “0”) {

return;

}

var firstWord = data.charAt(0);

if (data == “-”) {

data = data.substr(1);

this.data.arr.shift();

} else {

data = “-” + data;

this.data.arr.unshift("-");

}

this.setData({ “screenData”: data });

} else if (id == this.data.ide) { //等于=

var data = this.data.screenData;

if (data == “0”) {

return;

}

//eval是js中window的一个方法,而微信页面的脚本逻辑在是在JsCore中运行,JsCore是一个没有窗口对象的环境,所以不能再脚本中使用window,也无法在脚本中操作组件

//var result = eval(newData);

var lastWord = data.charAt(data.length);

if (isNaN(lastWord)) {

return;

}

var num = “”;

var lastOperator = “”;

var arr = this.data.arr;

var optarr = [];

for (var i in arr) {

if (isNaN(arr[i]) == false || arr[i] == this.data.idd || arr[i] == this.data.idt) {

num += arr[i];

} else {

lastOperator = arr[i];

optarr.push(num);

optarr.push(arr[i]);

num = “”;

}

}

optarr.push(Number(num));

var result = Number(optarr[0]) * 1.0;

console.log(result);

for (var i = 1; i < optarr.length; i++) {

if (isNaN(optarr[i])) {

if (optarr[1] == this.data.idadd) {

result += Number(optarr[i + 1]);

} else if (optarr[1] == this.data.idj) {

result -= Number(optarr[i + 1]);

} else if (optarr[1] == this.data.idx) {

result = Number(optarr[i + 1]);

} else if (optarr[1] == this.data.iddiv) {

result /= Number(optarr[i + 1]);

}

}

}

//存储历史记录

this.data.logs.push(data + ‘=’ + result);

wx.setStorageSync(“calclogs”, this.data.logs);

this.data.arr.length = 0;

this.data.arr.push(result);

this.setData({ “screenData”: result + “” });

} else {

if (this.data.operaSymbo[id]) { //如果是符号±/

if (this.data.lastIsOperaSymbo || this.data.screenData == “0”) {

return;

}

}

var sd = this.data.screenData;

var data;

if (sd == 0) {

data = id;

} else {

data = sd + id;

}

this.setData({ “screenData”: data });

this.data.arr.push(id);

if (this.data.operaSymbo[id]) {

this.setData({ “lastIsOperaSymbo”: true });

} else {

this.setData({ “lastIsOperaSymbo”: false });

}

}

},

history: function () {

wx.navigateTo({

url: ‘…/history/history’

})

}

})

2、index.wxml

<view class="content">

  <view class="layout-top">

    <view class="screen">

    {{screenData}}

    </view>

  </view>


  <view class="layout-bottom">

    <view class="btnGroup">

      <view class="item orange" bindtap="clickBtn" id="{{idc}}">С</view>

      <view class="item orange" bindtap="clickBtn" id="{{idb}}">←</view>

      <view class="item orange" bindtap="clickBtn" id="{{idt}}">+/-</view>

      <view class="item orange" bindtap="clickBtn" id="{{idadd}}">+</view>

    </view>

    <view class="btnGroup">

      <view class="item blue" bindtap="clickBtn" id="{{id9}}">9</view>

      <view class="item blue" bindtap="clickBtn" id="{{id8}}">8</view>

      <view class="item blue" bindtap="clickBtn" id="{{id7}}">7</view>

      <view class="item orange" bindtap="clickBtn" id="{{idj}}">-</view>

    </view>

    <view class="btnGroup">

      <view class="item blue" bindtap="clickBtn" id="{{id6}}">6</view>

      <view class="item blue" bindtap="clickBtn" id="{{id5}}">5</view>

      <view class="item blue" bindtap="clickBtn" id="{{id4}}">4</view>

      <view class="item orange" bindtap="clickBtn" id="{{idx}}">×</view>

    </view>

    <view class="btnGroup">

      <view class="item blue" bindtap="clickBtn" id="{{id3}}">3</view>

      <view class="item blue" bindtap="clickBtn" id="{{id2}}">2</view>

      <view class="item blue" bindtap="clickBtn" id="{{id1}}">1</view>

      <view class="item orange" bindtap="clickBtn" id="{{iddiv}}">÷</view>

    </view>

    <view class="btnGroup">

      <view class="item blue zero" bindtap="clickBtn" id="{{id0}}">0</view>

      <view class="item blue" bindtap="clickBtn" id="{{idd}}">.</view>

      <view class="item orange" bindtap="clickBtn" id="{{ide}}">=</view>

    </view>

  </view>

</view>

3、index.wcss

/* //height: 90%;*/

.content { 

    display: flex;

    flex-direction: column;

    align-items: center;

    background-color: #ccc;

    font-family: "Microsoft YaHei";

    overflow-x: hidden;

}

.layout-top{

    width: 100%;

    margin-bottom: 10rpx;

}

.layout-bottom{

    width: 100%;

}

.screen {

    text-align: right;

    width: 100%;

    line-height: 200rpx;

    padding: 0 10rpx;

    font-weight: bold;

    font-size: 60px;

    box-sizing: border-box;

    border-top: 1px solid #fff;

}

.btnGroup {

    display: flex;

    flex-direction: row;

    flex: 1;

    width: 100%;

    height: 5rem;

    background-color: #fff;

}

.item {

    width:25%;

    display: flex;

    align-items: center;

    flex-direction: column;

    justify-content: center;

    margin-top: 1px;

    margin-right: 1px;

}

.item:active {

    background-color: #ff0000;

}

.zero{

    width: 50%;

}

.orange {

    color: #fef4e9;

    background: #f78d1d;

    font-weight: bold;

}

.blue {

    color:#d9eef7;

    background-color: #0095cd;

}

.iconBtn{

    display: flex;

}

.icon{

  display: flex;

  align-items: center;

  width:100%;

  justify-content: center;

}

三、csdn下载链接:

https://download.csdn.net/download/kevin_lp/11931364

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,921评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,635评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,393评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,836评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,833评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,685评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,043评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,694评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,671评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,670评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,779评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,424评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,027评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,984评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,214评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,108评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,517评论 2 343

推荐阅读更多精彩内容