javascript实现计算器功能详解流程


Posted in Javascript onNovember 01, 2021

1、计算器功能介绍

可以实现数据的加(+),减(-),乘(*),除(/),取余运算(%),以及实现数据的删除(Del)和清空功能(C)。

2、计算器页面设计

1、导航栏部分

{
  "navigationBarBackgroundColor": "#fff",
  "navigationBarTextStyle": "black",
  "navigationBarTitleText": "计算器"
}

2、数据部分

data:{
  //  data中只放置初始数据
  num:"1",
  op:" "//记录运算符号
 }

3、index.wxml布局页面

<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="*">*</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" data-val=".">.</view>
    <view hover-class="bg" bindtap="opBtn" data-val="=">=</view>
  
  </view>
</view>

4、index.css样式页面

page{
  display: flex;
  flex-direction: column;/*项目主轴的排列方向 */
  height: 100%;
}
.result{
  flex: 1;/*均匀分配元素*/
  background: #f3f6fe;
  position: relative;
}
.result-num{
  position: absolute;/*父相子绝*/
  font-size: 20pt;
  bottom: 5vh;
  right: 3vw;
}
 
.result-op{
  position: absolute;
  font-size: 15pt;
  bottom: 1vh;
  right: 3vw;
}
.btns{
  flex: 1;
  display: flex;
  flex-direction: column;/*里面的大view排列为垂直*/
  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-bottom: 1rpx solid #ccc;
  border-right: 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: #fcBe00;
}
.bg{
  background: #eee;
}

5、运行结果

javascript实现计算器功能详解流程

3、功能实现部分

1、删除功能

其中substr()函数中两个参数,第一个表示截取开始的位置,第二个表示截取的长度

delBtn:function(e){
    var num=this.data.num.substr(0,this.data.num.length-1);
    this.setData({num:num===""? "0":num})
  }

2、清空功能

reSetBtn:function(e){
    //全部变成初始状态
    this.result=null;
    this.isClear=false;
    this.setData({num:"0",op:""})
  }

3、其他功能实现

data:{
  //  data中只放置初始数据
  num:"1",
  op:" "//记录运算符号
 },
  result:null,
  isClear:false,//用来记录状态
  numBtn:function(e){
    var num =e.target.dataset.val//获取data-val中的值
    //如果多次按0或者isClear为true,则将原来的数据清除,显示按的数字
    if(this.data.num==='0'||this.isClear){
      this.setData({num:num})//将获取的值给result
      this.isClear=false
    }else{
        this.setData({num:this.data.num+num})
    }
  },
 
  opBtn:function(e){
    var op=this.data.op;//先记录当前的op
    var num=Number(this.data.num);//获取当前的num数据
    this.setData({op:e.target.dataset.val});//把按下的按钮给变量op
    if(this.isClear){//因为上面操作中有如果按了运算符,则isclear为true,在这里为了避免多次按加都会起作用,再return
      return
    }
    this.isClear=true;//当用户按了运算按钮,再按数字,则把原来的数字清空
    if(this.result===null){
      this.result=num;
      return
    }
    if(op==="+"){
      this.result=this.result+num
      this.setData({num: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+""})//转为字符串类型
 
  },
  doBtn:function(e){
    if(this.isClear){//表示上一个运算结束了,一开始就按.的话
      this.setData({num:"0."});
      this.isClear=false;
      return
    }
    //如果多按了.
    if(this.data.num.indexOf(".")>=0){
      return
    }
    //正常数字后面按点
    this.setData({num:this.data.num+"."})
  },

到此这篇关于javascript实现计算器功能详解流程的文章就介绍到这了,更多相关javascript 计算器内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
input、button的不同type值在ajax提交表单时导致的陷阱
Feb 24 Javascript
jquery对ajax的支持介绍
Dec 10 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
Dec 24 Javascript
Jquery 实现table样式的设定
Jan 28 Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
Angular中响应式表单的三种更新值方法详析
Aug 22 Javascript
Vue在页面数据渲染完成之后的调用方法
Sep 11 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
Jun 10 Javascript
webpack优化之代码分割与公共代码提取详解
Nov 22 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
Aug 04 Javascript
10分钟学会js处理json的常用方法
Dec 06 Javascript
JS创建或填充任意长度数组的小技巧汇总
Oct 24 #Javascript
一文彻底理解js原生语法prototype,__proto__和constructor
Oct 24 #Javascript
javascript遍历对象的五种方式实例代码
Oct 24 #Javascript
低门槛开发iOS、Android、小程序应用的前端框架详解
Oct 16 #Javascript
基于angular实现树形二级表格
ajax请求前端跨域问题原因及解决方案
浅谈TypeScript 索引签名的理解
You might like
一个PHP数组应该有多大的分析
2009/07/30 PHP
php 无法载入mysql扩展
2010/03/12 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
PHP封装的page分页类定义与用法完整示例
2018/12/24 PHP
PHP的垃圾回收机制代码实例讲解
2021/02/27 PHP
JTrackBar水平拖动效果
2007/07/15 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
javascript中动态函数用法实例分析
2015/05/14 Javascript
AngularJS学习笔记之ng-options指令
2015/06/16 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
JS简单实现点击复制链接的方法
2016/08/03 Javascript
js制作支付倒计时页面
2016/10/21 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
轻松理解JavaScript之AJAX
2017/03/15 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
vue-loader教程介绍
2017/06/14 Javascript
vue axios请求超时的正确处理方法
2018/04/02 Javascript
[03:55]TI9战队采访——TNC Predator
2019/08/22 DOTA
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
python2和python3在处理字符串上的区别详解
2019/05/29 Python
快速解决pyqt5窗体关闭后子线程不同时退出的问题
2019/06/19 Python
Python制作词云图代码实例
2019/09/09 Python
django中使用事务及接入支付宝支付功能
2019/09/15 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
使用python matplotlib 画图导入到word中如何保证分辨率
2020/04/16 Python
英国女士家居服网站:hush
2017/08/09 全球购物
澳大利亚香水在线商店:City Perfume
2020/09/02 全球购物
环境科学毕业生自荐信
2013/11/21 职场文书
python自动化测试之Selenium详解
2022/03/13 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android
win10更新失败无限重启解决方法
2022/04/19 数码科技
Docker部署Mysql8的实现步骤
2022/07/07 Servers