简单实现JS计算器功能


Posted in Javascript onDecember 21, 2016

该计算器功能:
1.校验:小数点,重复计算,以及大量更符合用户体验的操作。
2.能够从键盘输入。

效果图:

简单实现JS计算器功能

html代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
<link type="text/css" rel="stylesheet" href="css/style.css"></link> 
</head> 
<body> 
  <!--定义按键表格,每个按键对应一个事件触发--> 
  <div id="cal" class="cal"> 
    <form action="./calcuServlet" method="post" id="toCalcu"> 
      <div class="cont"> 
      <input id="upText" class="textShow" type="text" name="process"  
         maxlength="10" readonly="readonly" />  
      <input id="downText" class="text" type="text" name="text" value="0" 
         maxlength="10" readonly="readonly" />  
          
      <input type="button" class="button" name="deleteAll" value="C" onclick="clearAllText()" /> 
      <input type="button" class="button" name="opposite" value="+/-" onclick="oppositeOp()" />  
      <input type="button" class="button" name="delOne" value="←" onclick="deleteOneDigit()" />  
      <input type="button" class="button" name="Add" value="+" onclick="clickOperation('+')" />      
      <input type="button" class="button" name="seven" value="7" onclick="clickNum(7)" /> 
      <input type="button" class="button" name="eight" value="8" onclick="clickNum(8)" /> 
      <input type="button" class="button" name="nine" value="9" onclick="clickNum(9)" /> 
      <input type="button" class="button" name="Reduce" value="-" onclick="clickOperation('-')" /> 
      <input type="button" class="button" name="Four" value="4" onclick="clickNum(4)" /> 
      <input type="button" class="button" name="Five" value="5" onclick="clickNum(5)" /> 
      <input type="button" class="button" name="Sex" value="6" onclick="clickNum(6)" />  
      <input type="button" class="button" name="Multip" value="x" onclick="clickOperation('x')" /> 
      <input type="button" class="button" name="One" value="1" onclick="clickNum(1)" />  
      <input type="button" class="button" name="Two" value="2" onclick="clickNum(2)" /> 
      <input type="button" class="button" name="Three" value="3" onclick="clickNum(3)" /> 
      <input type="button" class="button" name="Division" value="÷" onclick="clickOperation('/')" /> 
      <input type="button" class="button" name="opposite" value="√" onclick="more()" />    
      <input type="button" class="button" name="Zero" value="0" onclick="clickNum(0)" /> 
      <input type="button" class="button" name="Point" value="." onclick="clickNum('.')" /> 
      <input type="button" class="button" name="Equal" value="=" onclick="calcu()" />  
      </div> 
    </form> 
 
  </div> 
  <div class="funcBtn"> 
    <input type="button" id="show" class="button" value="show" onclick="show()" /> <input 
      type="button" id="hide" class="button" value="hide" onclick="hide()" /> 
  </div> 
   
<script type="text/javascript" src="./js/jquery-1.7.2.min.js"></script> 
<script type="text/javascript" src="./js/calcu.js"></script> 
</body> 
</html>

css代码:

@CHARSET "UTF-8"; 
.button { 
  width: 73px; 
  height: 50px; 
  margin-bottom: 5px; 
  border: 1px solid #ddd; 
  border-radius: 1px; 
  font-weight: bold; 
  color: #1e395b; 
  background: aqua; 
  font-size:20px; 
  border-radius: 3px; 
} 
.text { 
  width: 300px; 
  border: 1px solid #c2c2c2; 
  height: 50px; 
  border-radius: 5px; 
  font-size: 24px; 
  text-align: right; 
  background: #ffffff; 
  margin-top: 10px; 
  margin-bottom: 10px; 
} 
.textShow{ 
  width: 300px; 
  border: 1px solid #c2c2c2; 
  height: 40px; 
  border-radius: 5px; 
  font-size: 18px; 
  text-align: right; 
  background: #ffffff; 
  margin-top: 10px; 
  margin-bottom: 10px; 
} 
.cal{ 
margin-left:200px; 
border:2px solid #99ccff; 
margin:100px auto; 
position:relative; 
width:330px; 
height:420px; 
border-radius: 10px; 
} 
.cont{ 
 margin-left: 10px; 
} 
.funcBtn{ 
padding-left: 580px; 
border-radius: 10px; 
font-size: 20px; 
position: fixed; 
}

js代码:

/** 
 * 
 */ 
    var checkEqual = false;//Avoid repetition calcu 
    var opFlag = false; //Check repetition add operation 
    var upText = document.getElementById("upText"); 
    var cal = document.getElementById("cal").style; 
    var downText = document.getElementById("downText"); 
     
    function show() { 
      cal.display = "block"; 
    } 
     
    function hide() { 
      cal.display = "none"; 
    } 
     
    function clearAllText() { 
      upText.value = ""; 
      downText.value = "0"; 
      opFlag = false; 
      checkEqual = false; 
    } 
     
    function oppositeOp(){ 
      downText.value = -downText.value;     
    } 
     
    function deleteOneDigit() { 
      downText.value = downText.value.substring(0, downText.value.length - 1); 
      if (downText.value == "" || (downText.value.charAt(0) == "-" && downText.value.charAt(1) == "")) { 
        downText.value = "0"; 
        return downText.value; 
      } 
      return downText.value; 
    } 
     
    function clickNum(num) { 
      if(num == ".") {         
        checkIfAddPoint(num); 
      } else { 
        checkIfAddNum(num); 
      } 
      checkEqual = false; 
    } 
     
    function checkIfAddPoint(num) { 
      if((num=="." && downText.value == "0") || opFlag == true) { 
        downText.value="0."; 
        opFlag = false; 
      } else if(num == "." && downText.value.indexOf(".") > -1) { 
        downText.value; 
      } else { 
        downText.value += num; 
      } 
    } 
     
    function checkIfAddNum(num) { 
       if((num != "." && downText.value == "0" && downText.value[1] != ".")  
           || opFlag == true  
           || downText.value == "Infinity" 
           || checkEqual == true) { 
        downText.value = num; 
        opFlag = false; 
      } else { 
        downText.value += num; 
      } 
    } 
     
    function clickOperation(op){ 
      checkEqual = false; 
      downText.value = checkdownTextValid(downText.value); 
      downText.value = checkZero(upText.value,downText.value); 
      switch(op){ 
      case "+":{    
        upText.value = appendupTextValue(upText.value,downText.value,"+"); 
        opFlag = true; 
       }break; 
      case "-":{ 
        upText.value = appendupTextValue(upText.value,downText.value,"-"); 
        opFlag = true; 
       }break; 
      case "x":{ 
        upText.value = appendupTextValue(upText.value,downText.value,"*"); 
        opFlag = true; 
       }break; 
      case "/":{  
        upText.value = appendupTextValue(upText.value,downText.value,"/"); 
        opFlag = true; 
       }break; 
      } 
    } 
     
    function checkdownTextValid(downText){ 
      if(downText.charAt(downText.length-1) == "."){ 
        return downText.substring(0,downText.length-1); 
      }  
      return downText; 
    } 
     
    function checkZero(upText,downText){ 
      if(upText.charAt(upText.length-1) == "/" && downText == "0"){ 
        return "Error"; 
      } 
      return downText; 
    } 
     
    function appendupTextValue(oldvalue,newvalue,operation){ 
      if(oldvalue == ""){ 
         return oldvalue = newvalue+operation; 
      } else if(opFlag!=true){ 
         return oldvaluee = oldvalue+newvalue+operation;  
      } else{ 
        return oldvalue.substring(0, oldvalue.length-1)+operation; 
      } 
    } 
     
    function calcu() { 
      if(!checkEqual){   
      downText.value = eval(upText.value+downText.value); 
      upText.value = ""; 
      checkEqual = true; 
      } 
    } 
     
    window.document.onkeydown = chooseKey; 
    function chooseKey(evt){ 
      if(evt.keyCode == 13){alert("=");} 
      else if(evt.keyCode == 8){deleteOneDigit();} 
      else if(evt.keyCode == 27){clearAllText();} 
      else if(evt.keyCode == 48){clickNum('0');} 
      else if(evt.keyCode == 49){clickNum('1');} 
      else if(evt.keyCode == 50){clickNum('2');} 
      else if(evt.keyCode == 51){clickNum('3');} 
      else if(evt.keyCode == 52){clickNum('4');} 
      else if(evt.keyCode == 53){clickNum('5');} 
      else if(evt.keyCode == 54){clickNum('6');} 
      else if(evt.keyCode == 55){clickNum('7');} 
      else if(evt.keyCode == 56){clickNum('8');} 
      else if(evt.keyCode == 57){clickNum('9');} 
      else if(evt.keyCode == 96){clickNum('0');} 
      else if(evt.keyCode == 97){clickNum('1');} 
      else if(evt.keyCode == 98){clickNum('2');} 
      else if(evt.keyCode == 99){clickNum('3');} 
      else if(evt.keyCode == 100){clickNum('4');} 
      else if(evt.keyCode == 101){clickNum('5');} 
      else if(evt.keyCode == 102){clickNum('6');} 
      else if(evt.keyCode == 103){clickNum('7');} 
      else if(evt.keyCode == 104){clickNum('8');} 
      else if(evt.keyCode == 105){clickNum('9');} 
      else if(evt.keyCode == 110){clickNum('.');} 
      else if(evt.keyCode == 106){clickOperation('x');} 
      else if(evt.keyCode == 107){clickOperation('+');} 
      else if(evt.keyCode == 111){clickOperation('÷');} 
      else if(evt.keyCode == 109){clickOperation('-');}

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

Javascript 相关文章推荐
基于jquery实现一张图片点击鼠标放大再点缩小
Sep 29 Javascript
jQuery实现异步获取json数据的2种方式
Aug 29 Javascript
解决jquery版本冲突的有效方法
Sep 02 Javascript
jquery中checkbox使用方法简单实例演示
Nov 24 Javascript
JS控制静态页面传递参数并获取参数应用
Aug 10 Javascript
如何用JS/HTML将时间戳转换为“xx天前”的形式
Feb 06 Javascript
Vue组件开发初探
Feb 14 Javascript
详解JavaScript数组过滤相同元素的5种方法
May 23 Javascript
分享vue.js devtools遇到一系列问题
Oct 24 Javascript
vue项目动态设置页面title及是否缓存页面的问题
Nov 08 Javascript
koa源码中promise的解读
Nov 13 Javascript
react 移动端实现列表左滑删除的示例代码
Jul 04 Javascript
jQuery实现立体式数字滚动条增加效果
Dec 21 #Javascript
Bootstrap Search Suggest使用例子
Dec 21 #Javascript
简单实现Bootstrap标签页
Aug 09 #Javascript
获取JavaScript异步函数的返回值
Dec 21 #Javascript
bootstrap实现图片自动轮播
Dec 21 #Javascript
详解JavaScript时间处理之几个月前或几个月后的指定日期
Dec 21 #Javascript
详解前端自动化工具gulp自动添加版本号
Dec 20 #Javascript
You might like
php采集速度探究总结(原创)
2008/04/18 PHP
thinkphp表单上传文件并将文件路径保存到数据库中
2016/07/28 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
jquery $.ajax各个事件执行顺序
2010/10/15 Javascript
jquery实现table鼠标经过变色代码
2013/09/25 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
js+html5实现的自由落体运动效果代码
2016/01/28 Javascript
JS比较两个数值的大小实例
2016/11/25 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
浅谈js函数三种定义方式 &amp; 四种调用方式 &amp; 调用顺序
2017/02/19 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
vue-cli项目中使用Mockjs详解
2018/05/14 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
JS+css3实现幻灯片轮播图
2020/08/14 Javascript
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
[09:37]2018DOTA2国际邀请赛寻真——不懈追梦的Team Serenity
2018/08/13 DOTA
[01:33:30]DOTA2-DPC中国联赛 正赛 RNG vs Phoenix BO3 第二场 2月5日
2021/03/11 DOTA
Python 逐行分割大txt文件的方法
2017/10/10 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
11个Python Pandas小技巧让你的工作更高效(附代码实例)
2019/04/30 Python
python2.7 安装pip的方法步骤(管用)
2019/05/05 Python
详解Numpy数组转置的三种方法T、transpose、swapaxes
2019/05/27 Python
Python While循环语句实例演示及原理解析
2020/01/03 Python
python使用matplotlib绘制折线图的示例代码
2020/09/22 Python
解决Pymongo insert时会自动添加_id的问题
2020/12/05 Python
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
巴西儿童时尚购物网站:Dinda
2019/08/14 全球购物
2014年高三毕业生自我评价
2014/01/11 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
企业文化标语口号
2014/06/09 职场文书
赔偿协议书怎么写
2015/01/28 职场文书
老公写给老婆的检讨书
2015/05/06 职场文书
十大最帅动漫男主 碓冰拓海上榜,第一是《灌篮高手》男主角
2022/03/18 日漫