一、项目概述

功能:

  • 实现加减乘除
  • 去余(%)
  • 删除(Delete)
  • 全部清空( C)

html界面要在app.json里面注册。

不注册的话会报错:navigateTo:fail url "pages/index/talkPage" is not in app.json

注册完毕之后编译,开发工具会自动为你创建一个对应的js和wxss文件,而且js里面会自动搭好基本函数:

页面如下:

二、WXML文件编写

首先我们对计算器页面进行设计,这里我们主要分为两部分,上部分和下部,显示部分分为操作数和操作符。

计算器分为五行四列,最外面为纵向布局,里面为横向布局。布局通过样式表操作,

代码如下:

<view class="result">
  <!-- 当前view表示的是显示部分 -->
  <view class="result_num">{{num}}</view>
  <!--显示操作数 -->
  <view class="result_op">{{op}}</view>
  <!--显示操作符 -->
</view>

<view class="btns">
  <!-- 当前view表示的是操作部分 -->
  <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="doBtn">.</view>
    <view hover-class="bg" bindtap="opBtn" data-val="=">=</view>
  </view>
</view>

三、WXSS文件编写

这里分两部分,计算结果展示区,计算按钮区。可见wxml文件注释。

这里在补充一点样式设计:

  • display:flex 表示弹性布局,block块布局(后面接换行符)
    flex:1表示占满剩余空间(flex-grow,flex-shrink,flex-basis的简写)默认值为:0,1,auto, 不伸不缩
  • flex-direction:容器内元素的排列方向(默认横向排列)
    1.flex-direction:row;沿水平主轴让元素从左向右排列。此时flex-basis相当于width。
    2.flex-direction:colimn;沿垂直主轴从上到下排列。此时flex-basis相当于height
    3.flex-direction:roe-reverse;沿水平主轴从右向左排列
  • hover-class: 按下去的样式
  • **box-sizing:border-box;**将边框先计入宽度之内,用于确定准确边框宽度,任何像素都会影响页面效果
  • align-items:**垂直对齐,**display要设置成flex才能对齐属性赋值
  • justify-content:水平对齐方式
  • 样式表的设置“>”符号:表示嵌套级联关系
    .btns>view>view
    view>view
  • 视口单位

代码如下:

/* pages/cal/index.wxss */

.result {
  flex: 1; /* 弹性填充满*/
  background: #f3f6fe;
  position: relative;
}

.btns {
  flex: 1;
  display: flex; /*弹性显示结构*/
  flex-direction: column; /*纵向显示*/
  font-size: 17pt;
  border-top: 1rpx solid #ccc;
  border-left: 1rpx solid #ccc;
}

page {
  display: flex;
  flex-direction: column;
  height: 100%;
}

.btns>view {
  flex: 1;
  display: flex;
  flex-direction: row;
}

.btns>view>view {
  flex-basis: 25%;
  border-right: 1rpx solid #ccc;
  border-bottom: 1rpx solid #ccc;
  display: flex;
  align-items: center;
  justify-content: center;
}

.btns>view:last-child>view:first-child {
  flex-basis: 50%;
}

.bg {
  background-color: #eee;
}

.result_num {
  font-size: 17pt;
  position: absolute;
  bottom: 5vh;
  right: 3vw;
}

.result_op {
  font-size: 17pt;
  position: absolute;
  bottom: 1vh;
  right: 3vw;
}

四、JS页面设计

主要实现

代码如下:

Page({
  data: {
    num: "", //前台页面显示的输入数字或者结果
    op: "" //前台页面显示的操作符
  },
  result: null, //装载计算结果
  isClear: true, //是否需要清理前面的数字,true是要清理

  numBtn: function(e) {
    var num = e.target.dataset.val; //获取你输入的数字
    if (this.isClear || this.data.num == "0") //如果需要清理前面的数字,那么前面的数字就不需要保存
    {
      this.isClear = false; //将清理标志设置为false,以便连续输入数字
      this.setData({
        num: num
      });
    } else {
      this.setData({
        num: this.data.num   num //不清理前面的内容,将输入的内容追加到最后面,这是字符串的连接操作,因为两边都是字符串类型
      });
    }

  },

  opBtn: function(e) {
    var op = this.data.op; //获取上一次的操作符
    var num = Number(this.data.num); //获取操作数
    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 = cals.add(this.result, num);
      this.result = this.result   num; //数字加,因为num是数字类型
    } else if (op == "-") {
      // this.result = cals.sub(this.result, num);
      this.result = this.result - num;
    } else if (op == "*") {
      // this.result = cals.mul(this.result, num);
      this.result = this.result * num;
    } else if (op == "/") {
      // this.result = cals.div(this.result, num);
      this.result = this.result / num;
    } else if (op == "%") {
      this.result = this.result % num;
    }
    this.setData({
      num: this.result
    });

  },

  doBtn: function(e) {
    if (this.isClear) //如果直接点击小数点,则显示"0."
    {
      this.setData({
        num: "0."
      });
      this.isClear = false;
      return;
    }
    if (this.data.num.indexOf(".") >= 0) //查询前面输入的数字中,是否存在小数点
    {
      return; //如果存在小数点,当前输入无效
    }
    this.setData({
      num: this.data.num   "."
    });
  },
  delBtn: function(e) {
    var num = this.data.num.substr(0, this.data.num.length - 1);
    this.setData({
      num: num == "" ? "0" : num
    });
  },
  resetBtn: function(e) {
    this.result = null;
    this.isClear = true;
    this.setData({
      num: '0',
      op: ''
    });
  }
})

五、总结

1、计算器最重要注意样式表,JS。

在JS中要是想数据从前台传到后台通过事件的方式(e),从后台传到前台用data的方式。

2、主页跳转到计算器页面

主页index.wxml,增加一个按钮:

<button  bindtap="OnCalShow" >计算器</button>

在index.js中增增加

OnCalShow() {
    wx.navigateTo({
      url: '/pages/cal/index',
    })
  }

到此这篇关于微信小程序实现简易计算器的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持Devmax。

微信小程序实现简易计算器的更多相关文章

  1. 微信小程序“圣诞帽”的实现思路详解

    这两天朋友圈被圣诞帽刷屏,下面通过本文给大家分享微信小程序“圣诞帽”的实现思路详解,需要的朋友参考下吧

  2. Swift - 自定义UIActivity分享

    UIActivity可以十分方便地将文字、图片等内容进行分享,比如分享到微信、微博、发送邮件、短信等等。下面通过继承UIActivity实现定制按钮和功能,通过调用UIActivityViewController来展示分享框。,NSURL]//新建自定义的分享对象数组acts=[WeiXinActivity(),147)!important;font-family:Consolas,UIActivityTypePrintUIActivityTypeAssignToContactUIActivityType

  3. 基于JavaScript实现网页计算器

    这篇文章主要为大家详细介绍了基于JavaScript实现网页计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  4. php微信公众平台交互与接口详解

    这篇文章主要为大家详细介绍了php微信公众平台开发,交互与接口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. 小程序实现图片裁剪上传

    这篇文章主要为大家详细介绍了小程序实现图片裁剪上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  6. php版微信数据统计接口用法示例

    这篇文章主要介绍了php版微信数据统计接口用法,结合实例形式分析了php微信数据统计接口功能及相关的使用技巧,需要的朋友可以参考下

  7. js实现网页计算器

    这篇文章主要为大家详细介绍了js实现网页计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  8. PHP仿微信发红包领红包效果

    最近项目开发要求实现红包功能,仿微信(不含留言),但只能使用余额发红包。下面小编给大家分享PHP仿微信发红包领红包效果,感兴趣的朋友一起看看吧

  9. 基于Python实现微信自动回复功能

    这篇文章主要为大家详细介绍了Python如何通过WechatPCAPI来实现微信自动回复的功能,文中的示例代码讲解详细,快跟随小编一起动手尝试一下

  10. android简易计算器的制作

    这篇文章主要为大家详细介绍了android简易计算器的制作,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部