热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

微信小程序实现简易计算器

这篇文章介绍了微信小程序实现简易计算器的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,

一、项目概述

功能:

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

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

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

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

页面如下:

二、WXML文件编写

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

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

代码如下:


  
  {{num}}
  
  {{op}}
  



  
  
    
    C
    DEL
    %
    ÷
  
  
    
    7
    8
    9
    ×
  
  
    
    4
    5
    6
    -
  
  
    
    1
    2
    3
    +
  
  
    
    0
    .
    =
  

三、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,增加一个按钮:

在index.js中增增加

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

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


推荐阅读
  • layui表格分页不生效怎么办
    web前端|Layui教程layuiweb前端-Layui教程小程序实例源码,ubuntuip切换,tomcat默认端改为80,爬虫完整源码,微信小程序php接口,seo专业培训班 ... [详细]
  • 微信小程序实现简易计算器功能_javascript技巧
    这篇文章主要为大家详细介绍了微信小程序实现简易计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 微信小程序实现星级评分与展示
    这篇文章主要为大家详细介绍了微信小程序实现星级评分与展示,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的 ... [详细]
  • 微信小程序如何实现列表的横向滑动
    小编这次要给大家分享的是微信小程序如何实现列表的横向滑动,文章内容丰富,感兴趣的小伙伴可以来了解一下,希望大家阅读完这篇文章之后能够有所 ... [详细]
  • 微信小程序自定义组件与页面的相互传参
    这篇文章主要为大家介绍了微信小程序自定义组件与页面的相互传参过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java的集合及其实现类,包括数据结构、抽象类和具体实现类的关系,详细介绍了List接口及其实现类ArrayList的基本操作和特点。文章通过提供相关参考文档和链接,帮助读者更好地理解和使用Java的集合类。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • 项目需要实现弹幕,网上参考了各种方法,最后觉得transform+transition实现的效果在移动设备上性能最好,在iphone6和红米4上测试,看不到 ... [详细]
  • 今天就跟大家聊聊有关怎么在微信小程序中监听全局变量,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇 ... [详细]
  • 山雨欲来风满楼,最近微信小程序相关开发文章吹遍大江南北,亦有摧枯拉朽万象更新之势。问小程序形为何物,直教IT众生怡情悦性高潮迭起。作为一名有着远大理想“包袱”与互联网变革“使命感”的测试工程师,我再 ... [详细]
author-avatar
贝贝不离
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有