【微信小程序】计算器案例

news2024/12/31 3:50:23

在这里插入图片描述

🏆今日学习目标:第二十一期——计算器案例
✨个人主页:颜颜yan_的个人主页
⏰预计时间:30分钟
🎉专栏系列:我的第一个微信小程序


计算器

  • 前言
  • 实现效果
  • 实现步骤
    • wxml
    • wxss
    • js
      • 数字按钮事件处理函数
      • 计算按钮处理事件
      • 清空数字、删除数字、添加“.”事件处理函数
  • 总结


前言

嗨嗨嗨,好久没更新小程序专栏了,本期浅浅用小程序写一个计算器。
最终代码会上传至资源噢~


实现效果

在这里插入图片描述

实现步骤

新建一个项目,在app.json中配置文件导航栏的标题和颜色。

在这里插入图片描述
在这里插入图片描述

先在index.wxml中编写计算器页面的外层结构,也就是两个view,第一个view显示数字和运算符,第二个view显示各种按钮。
然后在index.wxss中添加样式。在page(整体页面)中使用flex布局,将result和btns的flex设置为1,实现两个view平分页面的效果。

<view class="result"></view>
<view class="btns"></view>
page{
    display: flex;
    flex-direction: column;
    height: 100%;
}
.result{
    flex: 1;
    background-color: #e0e0e0;
}
.btns{
    flex: 1;
}

在这里插入图片描述

wxml

接下来我们来编写页面内容。我们可以先观察计算器的布局,计算器的布局是5行4列,所以我们先写5个view组件表示5行,每个view中分别添加4个view表示4列。每个view表示计算器的不同按键。给每个按键定义数据data-val。
上半部分只有两个view组件,分别是用户输入的数字和需要的操作,这里需要绑定数据num和op
知识点: view组件的hover-class属性表示该组件按下时的class样式。

在这里插入图片描述

<view class="result">
    <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="*">x</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>

wxss

接下来编写样式啦,利用flex布局实现按钮根据容器的大小自动平分宽度和高度,设置flex-basis:“50%”;用于使按钮“0”占用两个按钮的宽度。

page{
    display: flex;
    flex-direction: column;
    height: 100%;
}
.result{
    flex: 1;
    background-color: #e0e0e0;
    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;
    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: red;
}
.btns > view >view:last-child{
    color: #fc8e00;
}
.bg{
    background: #ccc;
}

页面效果如下:
在这里插入图片描述

js

数字按钮事件处理函数

  1. 添加数字按钮事件实现数字的输入,先设置值,即num和op。
  2. 设置result和isClear,其中result用来保存上次运算结果。isClear表示输入的数字是否替代当前的数字,如果isClear的值为false,则表示下次输入的数字放在当前显示数字的末尾;如果isClear的值为true,则表示下次输入的数字替代当前的数字。
  3. 判断当前输入的数字是否为0。如果为0,则设置num的值为0;否则设置num的值为当前输入的值。
Page({
    data: {
        num: '',
        op: '',

    },
    // 数字按钮处理事件
    // 保存上次运算结果
    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});
        }
    }


})

计算按钮处理事件

  1. 获取当前输入的数字和符号;
  2. 判断是否重复计算;
  3. 判断符号是什么,当符号为+时,返回的结果就是当前数字加上添加的数字;当符号为-时,返回的结果就是当前数字减去添加的数字…
// 计算按钮事件
    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 = 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)){
            return
        }
    },
    delBtn:function(){
        var num = this.data.num.substr(0,this.data.num.length - 1);
        this.result = num;
        this.setData({num:num === ''?'0':num})
    },
    resBtn:function(){
        this.result = null;
        this.isClear = false;
        this.setData({num:'0',op:''})
    }

})


总结

以上就是今天的学习内容啦~
如果有兴趣的话可以订阅专栏,持续更新呢~
咱们下期再见~
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/389044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为啥一个 main 方法就能启动项目

在 Spring Boot 出现之前&#xff0c;我们要运行一个 Java Web 应用&#xff0c;首先需要有一个 Web 容器&#xff08;例如 Tomcat 或 Jetty&#xff09;&#xff0c;然后将我们的 Web 应用打包后放到容器的相应目录下&#xff0c;最后再启动容器。 在 IDE 中也需要对 Web 容器…

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(中)

前言 本文是HTML零基础学习系列的第二篇文章&#xff0c;点此阅读 上一篇文章。 文章目录前言六.HTML标题1.HTML标题2.HTML水平线3.HTML 注释七.HTML段落1.HTML段落2.HTML换行八.HTML文本格式化九.HTML链接十.HTML头部十一.HTML图像十二.HTML表格十三.HTML列表十四.HTML区块1.H…

C#:Krypton控件使用方法详解(第十二讲) ——kryptonCheckButton

今天介绍的Krypton控件中的kryptonCheckButton。下面先介绍外观属性&#xff1a;Checked属性&#xff1a;表示控件是否处于已启用状态&#xff0c;属性值为Bool类型&#xff0c;属性值为true时&#xff0c;表示控件处于已选中状态。属性值为false时&#xff0c;表示控件处于不选…

黄河流域公安院校网络空间安全技能挑战赛 QAQ 题解

目录 一.获取pyc文件 二.反编译出.py源码 三.程序逻辑 1.第一个限制条件 2.第二段 3.第三段 这题是对python打包成的可执行程序逆向 如果对如何反编译.pyc和.py文件有疑问可以参考: Python逆向基本操作步骤——以杭电新生赛hgame week2 reverse stream(python3.10逆向)…

IOC(概念和原理)

文章目录1. IOC容器概念2. IOC底层原理3. IOC&#xff08;接口&#xff09;4. IOC操作Bean管理&#xff08;概念&#xff09;5. IOC操作Bean管理&#xff08;基于xml方式&#xff09;5.1 基于xml创建对象5.2 基于xml方式注入属性5.2.1 DI&#xff1a;依赖注入&#xff0c;就是注…

Unable to find a valid cuDNN algorithm to run convolution

Unable to find a valid cuDNN algorithm to run convolution 今天在复习HumanNerf的时候发现了这个报错&#xff0c; import torch print(torch.cuda.is_available()) 使用上面的代码发现GPU是可以用的&#xff0c;可自己的torch版本对应。 后面继续看帖子&#xff0c;总结有…

【C++】30h速成C++从入门到精通(STL介绍、string类)

STL简介什么是STLSTL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本&…

2D图像处理:九点标定_上(机械手轴线与法兰轴线重合)(附源码)

文章目录 1. 九点标定2. 九点标定流程2.1 机械手轴线与法兰轴线重合代码实现1. 九点标定 在2D视觉抓取项目中,如果想要让机械手准确的抓取到工件,前提是需要知道机械手应该移动到哪里(位姿)。而移动到哪里(位姿)的获取就需要对相机和机械手进行标定。因此,九点标定(2D视…

ESP32设备驱动-MAX6675冷端补偿K热电偶数字转换器

MAX6675冷端补偿K热电偶数字转换器 1、MAX6675介绍 MAX6675执行冷端补偿并将来自K型热电偶的信号数字化。 数据以 12 位分辨率、SPI™ 兼容的只读格式输出。 该转换器可将温度解析为 0.25C,读数高达 +1024C,并且在 0C 至 +700C 的温度范围内具有 8 LSB 的热电偶精度。 MAX…

力扣旋转字符串

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏: &#x1f354;&#x1f35f;&#x1f32f; c语言初阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f349;本篇简介:>:介绍字符串旋转,左旋,右旋即旋转结果. 金句分享: ✨好好干&…

如何通过Java将Word转换为PDF

Word是我们日常编辑文档内容时十分常用的一种文档格式。但相比之下&#xff0c;PDF文档的格式、布局更为固定&#xff0c;不易被更改。在保存或传输较为重要的文档内容时&#xff0c;PDF文档格式也时很多人的不二选择。很多时候我们都会遇到需要将Word转换为PDF的情况。下面我就…

放弃node-sass,启用sass

在下载一个新项目时运行&#xff1a;npm run install 发现报错 npm uninstall 异常 Error: Could not find any Visual Studio installation to use 或是 ------------------------- You need to install the latest version of Visual Studio npm ERR! gyp ERR! find VS incl…

嵌入式Linux(二十四)系统烧写

将uboot&#xff0c;linux kernel&#xff0c;.dtb&#xff0c;rootfs烧写到板子上的EMMC上&#xff0c;避免断网导致不能运行。 1. MfgTool工具介绍 一路解压之后&#xff0c;得到以下两项&#xff1a; ①Profiles文件夹&#xff1a;后续烧写文件放到这个文件夹。  其中关注…

宝塔+docker+jenkins部署vue项目(保姆级教程)

1.使用宝塔安装docker 在软件商城安装Docker管理器 2.使用docker下载jenkins镜像 使用命令行 docker pull jenkins/jenkins:lts //lts表示支持版本较长3.创建并且挂载jenkins目录并赋值 jenkins_home为我创建的目录 可以修改任意目录 mkdir -p /jenkins_home cho…

pytest测试框架——allure报告

文章目录一、allure的介绍二、allure的运行方式三、allure报告的生成方式一、在线报告、会直接打开默认浏览器展示当前报告方式二、静态资源文件报告&#xff08;带index.html、css、js等文件&#xff09;&#xff0c;需要将报告布置到web服务器上。四、allure中装饰器1、实现给…

【LeetCode每日一题:982. 按位与为零的三元组+从递归超时到记忆化搜索】

题目描述 给你一个整数数组 nums &#xff0c;返回其中 按位与三元组 的数目。 按位与三元组 是由下标 (i, j, k) 组成的三元组&#xff0c;并满足下述全部条件&#xff1a; 0 < i < nums.length 0 < j < nums.length 0 < k < nums.length nums[i] & …

Common API环境部署(保姆级教程,填充了很多坑)

Common API环境部署目录一、前言及结果展示二、Windows下安装docker1. 准备工作[1.1 Docker安装包](https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe)[1.2 Wsl2安装包](https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.ms…

【数据结构】链式二叉树

前言 在前面我们学习了一些二叉树的基本知识&#xff0c;了解了它的结构以及一些性质&#xff0c;我们还用数组来模拟二叉树建立了堆&#xff0c;并学习了堆排序&#xff0c;可是数组结构的二叉树有很大的局限性&#xff0c;平常我们用的最多树结构的还是链式二叉树&#xff0c…

【自律】学习方案

自律来源 轶事 陆奇以精力旺盛著称&#xff0c;通常凌晨4点起床&#xff0c;先查邮件&#xff0c;然后在跑步机上跑4英里&#xff0c;边跑边听古典音乐或看新闻。早上5点至6点至办公室&#xff0c;利用这段时间不受别人干扰准备一天的工作&#xff0c;然后一直工作到晚上10点&a…

搜索引擎的设计与实现

技术&#xff1a;Java、JSP等摘要&#xff1a;随着互联网的快速发展&#xff0c;网络上的数据也随着爆炸式地增长。如何最快速筛选出对我们有用的信息成了主要问题。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息&#xff0c;在对信息进行组织和处理后&…