简单实现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 相关文章推荐
JavaScript 动态生成方法的例子
Jul 22 Javascript
Jquery的hover方法让鼠标经过li时背景变色
Sep 06 Javascript
使用JS读秒使用示例
Sep 21 Javascript
iframe子父页面调用js函数示例
Nov 07 Javascript
JavaScript分页功能的实现方法
Apr 25 Javascript
JavaScript职责链模式概述
Sep 17 Javascript
Angular5给组件本身的标签添加样式class的方法
Apr 07 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
Jul 31 Javascript
深入浅析angular和vue还有jquery的区别
Aug 13 jQuery
jQuery+css last-child实现选择最后一个子元素操作示例
Dec 10 jQuery
微信小程序实现时间进度条功能
Nov 17 Javascript
react合成事件与原生事件的相关理解
May 13 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的时间戳与具体时间转化的简单实现
2016/06/13 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
2019/09/19 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
JS 页面自动加载函数(兼容多浏览器)
2009/05/18 Javascript
js DOM模型操作
2009/12/28 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
JS实现响应鼠标点击动画渐变弹出层效果代码
2016/03/25 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
JavaScript实现邮箱地址自动匹配功能代码
2016/11/28 Javascript
简单理解vue中实例属性vm.$els
2016/12/01 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
微信小程序实现动态设置页面标题的方法【附源码下载】
2017/11/29 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
Python3.2中Print函数用法实例详解
2015/05/19 Python
django Admin文档生成器使用详解
2019/07/22 Python
Django用户认证系统 User对象解析
2019/08/02 Python
关于python中的xpath解析定位
2020/03/06 Python
英国健身超市:Fitness Superstore
2019/06/17 全球购物
Mountain Warehouse德国官网:英国户外零售商
2019/08/11 全球购物
医院护士的求职信范文
2013/12/26 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
代理商会议邀请函
2014/01/27 职场文书
司法局火灾防控方案
2014/06/05 职场文书
校本教研活动总结
2014/07/01 职场文书
教育见习报告范文
2014/11/03 职场文书
2015年个人现实表现材料
2014/12/10 职场文书
五一劳动节活动总结
2015/02/09 职场文书
慈善献爱心倡议书
2015/04/27 职场文书
基于Python绘制子图及子图刻度的变换等的问题
2021/05/23 Python
python中%格式表达式实例用法
2021/06/18 Python