javascript实现计算器功能


Posted in Javascript onMarch 30, 2020

本文实例为大家分享了javascript实现计算器功能的具体代码,供大家参考,具体内容如下

javascript实现计算器功能

问题描述:

1、除法操作时,如果被除数为0,则结果为0
2、结果如果为小数,最多保留小数点后两位,如2 / 3 =0.67(显示0.67),1 / 2 = 0.5(显示0.5)

<!DOCTYPE html>
<html>
 <head>
 <meta charset="utf-8">
 <title>百度笔试0329</title>
 <style type="text/css">
 body, ul, li,select {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
 }
 ul,li {list-style: none;}
 .calculator {
  max-width: 300px;
  margin: 20px auto;
  border: 1px solid #eee;
  border-radius: 3px;
 }
 .cal-header {
  font-size: 16px;
  color: #333;
  font-weight: bold;
  height: 48px;
  line-height: 48px;
  border-bottom: 1px solid #eee;
  text-align: center;
 }
 .cal-main {
  font-size: 14px;
 }
 .cal-main .origin-value {
  padding: 15px;
  height: 40px;
  line-height: 40px;
  font-size: 20px;
  text-align: right;
  overflow: hidden;
  text-overflow:ellipsis;
  white-space: nowrap;
 }
 .cal-main .origin-type,
 .cal-main .target-type {
  padding-left: 5px;
  width: 70px;
  font-size: 14px;
  height: 30px;
  border: 1px solid #eee;
  background-color: #fff;
  vertical-align: middle;
  margin-right: 10px;
  border-radius: 3px;
 }
 .cal-keyboard {
  overflow: hidden;
 }
 .cal-items {
  overflow: hidden;
 }
 .cal-items li {
  user-select: none;
  float: left;
  display: inline-block;
  width: 75px;
  height: 75px;
  text-align: center;
  line-height: 75px;
  border-top: 1px solid #eee;
  border-left: 1px solid #eee;
  box-sizing: border-box;
 }
 li:nth-of-type(4n+1) {
  border-left: none;
 }
 li[data-action=operator] {
  background: #f5923e;
  color: #fff;
 }
 .buttons {
  float: left;
  width: 75px;
 }
 .buttons .btn {
  width: 75px;
  background-color: #fff;
  border-top: 1px solid #eee;
  border-left: 1px solid #eee;
  height: 150px;
  line-height: 150px;
  text-align: center;
 }
 .btn-esc {
  color: #ff5a34;
 }
 .btn-backspace {
  position: relative;
 }
 </style>
 </head>
 <body>
 <div class="calculator">
  <header class="cal-header">简易计算器</header>
  <main class="cal-main">
   <div class="origin-value">0</div>
   <div class="cal-keyboard">
    <ul class="cal-items">
     <li data-action="num">7</li>
     <li data-action="num">8</li>
     <li data-action="num">9</li>
     <li data-action="operator">÷</li>
     <li data-action="num">4</li>
     <li data-action="num">5</li>
     <li data-action="num">6</li>
     <li data-action="operator">x</li>
     <li data-action="num">1</li>
     <li data-action="num">2</li>
     <li data-action="num">3</li>
     <li data-action="operator">-</li>
     <li data-action="num">0</li>
     <li data-action="operator">清空</li>
     <li data-action="operator">=</li>
     <li data-action="operator">+</li>
    </ul>
   </div>
  </main>
 </div>
 <script type="text/javascript">
 var Calculator = {
  init: function () {
   var that = this;
   if (!that.isInited) {
    that.isInited = true;
    // 保存操作信息
    // total: Number, 总的结果
    // next: String, 下一个和 total 进行运算的数据
    // action: String, 操作符号
    that.data = {total: 0, next: '', action: ''};
    that.bindEvent();
   }
  },
  bindEvent: function () {
   var that = this;
   // 请补充代码:获取 .cal-keyboard 元素
   var keyboardEl = document.getElementsByClassName('cal-keyboard')[0]
   keyboardEl && keyboardEl.addEventListener('click', function (event) {
    // 请补充代码:获取当前点击的dom元素
    var target = event.target;
    // 请补充代码:获取target的 data-action 值
    var action = target.getAttribute('data-action');
    // 请补充代码:获取target的内容
    var value = target.innerHTML;
    if (action === 'num' || action === 'operator') {
     that.result(value, action === 'num');
    }
   });
  },
  result: function (action, isNum) {
   var that = this;
   var data = that.data;
   if (isNum) {
    data.next = data.next === '0' ? action : (data.next + action);
    !data.action && (data.total = 0);
   } else if (action === '清空') {
    // 请补充代码:设置清空时的对应状态
    data.total = 0;
    data.next = '';
    data.action = '';
   } else if (action === '=') {
    if (data.next || data.action) {
     data.total = that.calculate(data.total, data.next, data.action);
     data.next = '';
     data.action = '';
    }
   } else if (!data.next) {
    data.action = action;
   } else if (data.action) {
    data.total = that.calculate(data.total, data.next, data.action);
    data.next = '';
    data.action = action;
   } else {
    data.total = +data.next || 0;
    data.next = '';
    data.action = action;
   }
  
   // ���补充代码:获取 .origin-value 元素
   var valEl = document.getElementsByClassName('origin-value')[0];
   valEl && (valEl.innerHTML = data.next || data.total || '0');
  },
  calculate: function (n1, n2, operator) {
   n1 = +n1 || 0;
   n2 = +n2 || 0;
   if (operator === '÷') {
    // 请补充代码:获取除法的结果
  if(n2 == 0 || n1 == 0) return 0
    return Math.round((n1/n2)*100)/100;
   } else if (operator === 'x') {
    // 请补充代码:获取乘法的结果
    return n1 * n2;
   } else if (operator === '+') {
    // 请补充代码:获取加法的结果
    return n1 + n2;
   } else if (operator === '-') {
    // 请补充代码:获取减法的结果
    return n1 - n2;
   }
  }
 };
 Calculator.init();
 </script>
 </body>
</html>

更多计算器功能实现,请点击专题: 计算器功能汇总 进行学习

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
prototype.js的Ajax对象
Sep 23 Javascript
JQuery 遮罩层实现(mask)实现代码
Jan 09 Javascript
javascript (用setTimeout而非setInterval)
Dec 28 Javascript
jquery插件hiAlert实现网页对话框美化
May 03 Javascript
jquery插件validation实现验证身份证号等
Jun 04 Javascript
Javascript 两种刷新方法以及区别和适用范围
Jan 17 Javascript
JS+html5 canvas实现的简单绘制折线图效果示例
Mar 13 Javascript
angularJS深拷贝详解
Mar 23 Javascript
Express之get,pos请求参数的获取
May 02 Javascript
js实现倒计时关键代码
May 05 Javascript
bootstrap+jQuery 实现下拉菜单中复选框全选和全不选效果
Jun 12 jQuery
layui 富文本编辑器和textarea值的相互传递方法
Sep 18 Javascript
详解Webpack抽离第三方类库以及common解决方案
Mar 30 #Javascript
记一次react前端项目打包优化的方法
Mar 30 #Javascript
12 种使用Vue 的最佳做法
Mar 30 #Javascript
javascript实现简易数码时钟
Mar 30 #Javascript
vue计算属性+vue中class与style绑定(推荐)
Mar 30 #Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
Mar 29 #Javascript
JS实现滑动拼图验证功能完整示例
Mar 29 #Javascript
You might like
一个简单的PHP入门源程序
2006/10/09 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
2011/12/12 Javascript
有关于JS辅助函数inherit()的问题
2013/04/07 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
js正则表达exec与match的区别说明
2014/01/29 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
基于slideout.js实现移动端侧边栏滑动特效
2016/11/28 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
2017/12/09 Javascript
详解angular脏检查原理及伪代码实现
2018/06/08 Javascript
使用vue 国际化i18n 实现多实现语言切换功能
2018/10/11 Javascript
深入理解vue中的slot与slot-scope
2019/04/22 Javascript
小程序实现简单语音聊天的示例代码
2020/07/24 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
[02:04]完美世界城市挑战赛秋季赛报名开始 谁是solo路人王?
2019/10/10 DOTA
python中pygame安装过程(超级详细)
2019/08/04 Python
Python GUI学习之登录系统界面篇
2019/08/21 Python
python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)
2020/03/18 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
2020/06/11 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
Python操作Excel的学习笔记
2021/02/18 Python
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
Dr.Jart+美国官网:韩国药妆品牌
2019/01/18 全球购物
计算机专业优秀大学生自我总结
2014/01/21 职场文书
优秀经理事迹材料
2014/02/01 职场文书
英语教学随笔感言
2014/02/20 职场文书
和解协议书
2014/04/16 职场文书
电台编导求职信
2014/05/06 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
环卫工作个人总结
2015/03/04 职场文书
企业财务管理制度范本
2015/08/04 职场文书
远程教育学习心得体会
2016/01/23 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis