JS实现简易计算器


Posted in Javascript onFebruary 14, 2020

用JS实现简易计算器,供大家参考,具体内容如下

首先创建结构和样式

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
  body{
   margin:0;
   padding:0;
   background-color: #abcdef;
  }
  .cal{
   width:560px;
   height:100px;
   margin:0 auto;
   padding-top:300px;
  }
 </style>
</head>
<body>

 <div class="cal">
  <p>
   <input type="text" class="num1" value="1">
   <span class="sign">+</span>
   <input type="text" class="num2" value="1">
   <span>=</span>
   <span class="res">2</span>
  </p>
  <p>
   <input type="button" value="+">
   <input type="button" value="-">
   <input type="button" value="*">
   <input type="button" value="/">
  </p>   
 </div>
<script>


</script>

</body>
</html>

然后添加Java script

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
  body{
   margin:0;
   padding:0;
   background-color: #abcdef;
  }
  .cal{
   width:560px;
   height:100px;
   margin:0 auto;
   padding-top:300px;
  }
 </style>
</head>
<body>

 <div class="cal">
  <p>
   <input type="text" class="num1" value="1">
   <span class="sign">+</span>
   <input type="text" class="num2" value="1">
   <span>=</span>
   <span class="res">2</span>
  </p>
  <p>
   <input type="button" value="+" class="btn">
   <input type="button" value="-" class="btn">
   <input type="button" value="*" class="btn">
   <input type="button" value="/" class="btn">
  </p>   
 </div>

<script>
 var cal=document.querySelector(".cal");
 var num1=cal.querySelector(".num1");
 var num2=cal.querySelector(".num2");
 var sign=cal.querySelector(".sign");
 var res=cal.querySelector(".res");

 var btns=cal.querySelectorAll(".btn");

 btns[0].onclick=add;
 btns[1].onclick=subtract;
 btns[2].onclick=multiply;
 btns[3].onclick=divide;

 function add(){
  sign.innerHTML="+";
  //由于DOM获取到的值都是字符串形式,因此进行操作时需要先转为number类型
  res.innerHTML=Number(num1.value)+Number(num2.value);
 }
 function subtract(){
  sign.innerHTML="-";
  res.innerHTML=Number(num1.value)-Number(num2.value);
 }
 function multiply(){
  sign.innerHTML="*";
  res.innerHTML=Number(num1.value)*Number(num2.value); 
 }
 function divide(){
  sign.innerHTML="/";
  res.innerHTML=Number(num1.value)/Number(num2.value); 
 }
</script>

</body>
</html>

代码的优化:

循环实现绑定

给一个外部接口,用于新增运算

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Document</title>
 <style>
  body{
   margin:0;
   padding:0;
   background-color: #abcdef;
  }
  .cal{
   width:560px;
   height:100px;
   margin:0 auto;
   padding-top:300px;
  }
 </style>
</head>
<body>

 <div class="cal">
  <p>
   <input type="text" class="num1" value="1">
   <span class="sign">+</span>
   <input type="text" class="num2" value="1">
   <span>=</span>
   <span class="res">2</span>
  </p>
  <p>
   <input type="button" value="+" class="btn" title="add">
   <input type="button" value="-" class="btn" title="subtract">
   <input type="button" value="*" class="btn" title="multiply">
   <input type="button" value="/" class="btn" title="divide">
   <input type="button" value="%" class="btn" title="mod">
  </p>   
 </div>

<script>
 var cal=document.querySelector(".cal");
 var num1=cal.querySelector(".num1");
 var num2=cal.querySelector(".num2");
 var sign=cal.querySelector(".sign");
 var res=cal.querySelector(".res");

 var btns=cal.querySelectorAll(".btn");

 //给每个按钮绑定事件
 for(var i=0;i<btns.length;i++){
  operate(i);
 }

 //运算函数
 function operate(i){
  var op=btns[i].value;//获取运算
  var opName=btns[i].title;//获取运算名
  //绑定事件
  btns[i].onclick=function(){
   sign.innerHTML=op;
   res.innerHTML=operation[opName](Number(num1.value),Number(num2.value));
  }
 }

 var operation={
  add:function(n1,n2){
   return n1+n2;
  },
  subtract:function(n1,n2){
   return n1-n2;
  },
  multiply:function(n1,n2){
   return n1*n2;
  },
  divide:function(n1,n2){
   return n1/n2;
  },
  //给一个新增运算的接口
  addOperation:function(name,fn){
   //如果该运算不存在
   if(!this.name){
    this[name]=fn;
   }
  }
 }

 //新增取余运算
 operation.addOperation("mod",function(n1,n2){
  return n1%n2;
 });
</script>

</body>
</html>

这样就圆满完成咯

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

Javascript 相关文章推荐
js树形控件脚本代码
Jul 24 Javascript
javaScript实现浮点数转十六进制字符
Oct 29 Javascript
jquery实现的图片点击滚动效果
Apr 29 Javascript
jQuery CSS()方法改变现有的CSS样式
Aug 20 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
微信支付如何实现内置浏览器的H5页面支付
Sep 25 Javascript
jQuery EasyUI 入门必看
Jun 03 Javascript
AngularJS表单验证中级篇(3)
Sep 28 Javascript
vue.js指令v-for使用及索引获取
Nov 03 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
javascript获取指定区间范围随机数的方法
Sep 08 Javascript
vue双花括号的使用方法 附练习题
Nov 07 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
Feb 14 #Javascript
node.js中npm包管理工具用法分析
Feb 14 #Javascript
vue-cli创建的项目中的gitHooks原理解析
Feb 14 #Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
Feb 14 #Javascript
bootstrap-paginator服务器端分页使用方法详解
Feb 13 #Javascript
JavaScript实现Tab选项卡切换
Feb 13 #Javascript
Angular 多模块项目构建过程
Feb 13 #Javascript
You might like
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
PHPThumb图片处理实例
2014/05/03 PHP
PHP实现批量上传单个文件
2015/12/29 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
JavaScript html5 canvas绘制时钟效果
2016/03/01 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
JavaScript享元模式原理与用法实例详解
2020/03/09 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
[53:36]Liquid vs VP Supermajor决赛 BO 第三场 6.10
2018/07/05 DOTA
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
在Python中使用正则表达式的方法
2015/08/13 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
Python之dict(或对象)与json之间的互相转化实例
2018/06/05 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
Python如何使用ElementTree解析xml
2020/10/12 Python
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
护士的岗位职责
2013/12/04 职场文书
公交公司毕业生求职信
2014/02/15 职场文书
求职自荐信的格式
2014/04/07 职场文书
保护黄河倡议书
2014/05/16 职场文书
收款委托书
2014/10/14 职场文书
2014年纪检监察工作总结
2014/11/11 职场文书
先进典型事迹材料
2014/12/29 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
分享几个简单MySQL优化小妙招
2022/03/31 MySQL
Python安装使用Scrapy框架
2022/04/12 Python