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 匿名调用实现代码
Jun 19 Javascript
利用毫秒减值计算时长的js代码
Sep 22 Javascript
form.submit()不能提交表单的错误原因及解决方法
Oct 13 Javascript
JavaScript中常见的字符串操作函数及用法汇总
May 04 Javascript
高性能JavaScript循环语句和条件语句
Jan 20 Javascript
原生JS实现几个常用DOM操作API实例
Jan 19 Javascript
原生js实现秒表计时器功能
Feb 16 Javascript
使用watch监听路由变化和watch监听对象的实例
Feb 24 Javascript
Node.js如何对SQLite的async/await封装详解
Feb 14 Javascript
vue中的面包屑导航组件实例代码
Jul 01 Javascript
vue+AI智能机器人回复功能实现
Jul 16 Javascript
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
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正则表达式之定界符和原子介绍
2012/10/05 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
AJAX PHP无刷新form表单提交的简单实现(推荐)
2016/09/09 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
Javascript中产生固定结果的函数优化技巧
2013/01/16 Javascript
animate动画示例(泪奔的小孩)及stop和delay的使用
2013/05/06 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
js获取html文件的思路及示例
2013/09/17 Javascript
javascript实现原生ajax的几种方法介绍
2013/09/21 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
iframe中子父类窗口调用JS的方法及注意事项
2015/08/25 Javascript
Vue.js实战之利用vue-router实现跳转页面
2017/04/01 Javascript
vue.js实现价格格式化的方法
2017/05/23 Javascript
JavaScript实现的可变动态数字键盘控件方式实例代码
2017/07/15 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
2017/07/22 jQuery
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
python实现从web抓取文档的方法
2014/09/26 Python
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
python实现dijkstra最短路由算法
2019/01/17 Python
pandas去重复行并分类汇总的实现方法
2019/01/29 Python
PyQT实现菜单中的复制,全选和清空的功能的方法
2019/06/17 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
python中os.remove()用法及注意事项
2021/01/31 Python
全球性的女装店:storets
2019/06/12 全球购物
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
SQL数据库笔试题
2016/03/08 面试题
全国道德模范事迹
2014/02/01 职场文书
最新结婚典礼主持词
2014/03/14 职场文书
面试必备的求职信
2014/05/25 职场文书
公务员群众路线心得体会
2014/11/03 职场文书
Python爬虫实战之爬取携程评论
2021/06/02 Python
Golang入门之计时器
2022/05/04 Golang
Python如何加载模型并查看网络
2022/07/15 Python