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 相关文章推荐
分享27个jQuery 表单插件集合推荐
Apr 25 Javascript
D3.js 从P元素的创建开始(显示可加载数据)
Oct 30 Javascript
JS实现黑客帝国文字下落效果
Sep 01 Javascript
JavaScript 继承详解(六)
Oct 11 Javascript
详解Javascript百度地图接口开发文档中的类和方法
Feb 07 Javascript
基于JavaScript定位当前的地理位置
Apr 11 Javascript
vue-lazyload图片延迟加载插件的实例讲解
Feb 09 Javascript
详解如何在vue项目中引入elementUI组件
Feb 11 Javascript
vue引用js文件的多种方式(推荐)
May 17 Javascript
vue v-model动态生成详解
Jun 30 Javascript
微信小程序实现九宫格抽奖
Apr 15 Javascript
JavaScript学习教程之cookie与webstorage
Jun 23 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
再说下636单管机
2021/03/02 无线电
PHP中把对象数组转换成普通数组的方法
2015/07/10 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
Zend Framework处理Json数据方法详解
2016/12/09 PHP
实例化php类时传参的方法分析
2020/06/05 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
javascript 获取所有id中包含某关键字的控件的实现代码
2010/11/25 Javascript
使用隐藏的new来创建对象
2011/03/29 Javascript
使用js操作css实现js改变背景图片示例
2014/03/10 Javascript
ExtJS4 表格的嵌套 rowExpander应用
2014/05/02 Javascript
js使用心得分享
2015/01/13 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
js判断文本框剩余可输入字数的方法
2015/02/04 Javascript
JavaScript中判断函数、变量是否存在
2015/06/10 Javascript
JavaScript中使用Math.PI圆周率属性的方法
2015/06/14 Javascript
Vue.js使用v-show和v-if的注意事项
2016/12/13 Javascript
vue事件修饰符和按键修饰符用法总结
2017/07/25 Javascript
jquery+css3实现熊猫tv导航代码分享
2018/02/12 jQuery
JS实现的input选择图片本地预览功能示例
2018/08/29 Javascript
解决IE11 vue +webpack 项目中数据更新后页面没有刷新的问题
2018/09/25 Javascript
layui实现给某一列加点击事件
2019/10/26 Javascript
python判断端口是否打开的实现代码
2013/02/10 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
详解python字节码
2018/02/07 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
LUISAVIAROMA德国官网:时尚奢侈品牌购物网站
2020/11/12 全球购物
大学生作弊检讨书
2014/02/19 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
应届毕业生求职信
2014/05/26 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
入党后的感想
2015/08/10 职场文书
python中mongodb包操作数据库
2022/04/19 Python