zoukankan      html  css  js  c++  java
  • JS编写的科学计算器

    最近半个月编写了一个JS+CSS+HTML的网页计算器,从最初的具有简陋界面的简单计算器改版到最终具有科学/标准计算器转换功能并且界面非常友好的计算器,收获良多!总的来说,代码简单,通俗易读,下面贴上代码,供前端新手学习!欢迎提出宝贵意见,不吝指正!

     HTML代码(代码中仅仅是计算器界面内容布局):

    <html>
    <head>
    	<title>计算器</title>
     <link href="style.css" rel="stylesheet" type="text/css"/>
      <script src="script.js"></script>
     
    </head>
     
    <body>
     
    <div id="calculator">
    	<a href="http://write.blog.csdn.net/postlist" id='record'>计Sweet Smile</a>
    	<div class="rescult">
    		<textarea type="text" id="result0" οnfοcus="this.blur();"></textarea>
    		<textarea type="text" id="result" οnfοcus="this.blur();"></textarea>
    	</div>
     	<div>
    		<section class="model-1">           <!--包含按钮的一个长形区域-->
    		  <div class="checkbox"  οnclick="styleChange()">			
    		  <!--包含按钮的一个较小长形区域-->
    		    <input type="checkbox"/>
    		    <label>科学标准</label>					<!--按钮底部的灰色滑动区-->
    		  </div>
    		</section>
    	</div>
     
    	<!--标准计算器布局-->
     	<div id="rows" style="display:inline;">
    	<div class="row1">
    		<button id="bt1" οnclick="zero()">C</button>
    		<button id="bt2" οnclick="back()">DEL</button>
    		<button id="bt3" οnclick="divide()">÷</button>
    		<button id="bt4" οnclick="times()">×</button>
    	</div>
    	<div class="row2">
    		<button id="bt5" οnclick="num(7)">7</button>
    		<button id="bt6" οnclick="num(8)">8</button>
    		<button id="bt7" οnclick="num(9)">9</button>
    		<button id="bt8" οnclick="plus()">+</button>
    	</div>
    	<div class="row3">
    		<button id="bt9" οnclick="num(4)">4</button>
    		<button id="bt10" οnclick="num(5)">5</button>
    		<button id="bt11" οnclick="num(6)">6</button>
    		<button id="bt12" οnclick="minus()">-</button>
    	</div>
     
    	<div id="below">
    		<div id="left">
    			<div class="row4">
    				<button id="bt13" οnclick="num(1)">1</button>
    				<button id="bt14" οnclick="num(2)">2</button>
    				<button id="bt15" οnclick="num(3)">3</button>
    			</div>
    			<div class="row5">
    				<button id="bt16" οnclick="num(0)">0</button>
    				<button id="bt17" οnclick="dot()">.</button>
    			</div>
    		</div>
    		<div id="right">
    			<button id="bt18" οnclick="equal()">=</button>
    		</div>
    	</div>
     
    	</div>
     
    	<!--科学计算器布局-->
    	<div id="sci"  style="display:none;">
    		<div class="sci1">
    				<button id="bt21" οnclick="zero()">C</button>
    				<button id="bt22" οnclick="back()">DEL</button>
    				<button id="bt23" οnclick="pow1()">^</button>
    				<button id="bt24" οnclick="num('π')">π</button>
    				<button id="bt25" οnclick="pow2()">√</button>
    		</div>
    		<div class="sci2">
    				<button id="bt26" οnclick="sin()">sin</button>
    				<button id="bt27" οnclick="num('(')">(</button>
    				<button id="bt28" οnclick="num(')')">)</button>
    				<button id="bt29" οnclick="divide1()">1/X</button>
    				<button id="bt30" οnclick="divide()">÷</button>
    		</div>
    		<div class="sci3">
    				<button id="bt31" οnclick="cos()">cos</button>
    				<button id="bt32" οnclick="num(7)">7</button>
    				<button id="bt33" οnclick="num(8)">8</button>
    				<button id="bt34" οnclick="num(9)">9</button>
    				<button id="bt35" οnclick="times()">×</button>
    		</div>
    		<div class="sci4">
    				<button id="bt36" οnclick="tan()">tan</button>
    				<button id="bt37" οnclick="num(4)">4</button>
    				<button id="bt38" οnclick="num(5)">5</button>
    				<button id="bt39" οnclick="num(6)">6</button>
    				<button id="bt40" οnclick="minus()">-</button>
    		</div>
    		<div class="sci5">
    				<button id="bt41" οnclick="ln()">ln</button>
    				<button id="bt42" οnclick="num(1)">1</button>
    				<button id="bt43" οnclick="num(2)">2</button>
    				<button id="bt44" οnclick="num(3)">3</button>
    				<button id="bt45" οnclick="plus()">+</button>
    		</div>
    		<div class="sci6">
    				<button id="bt46" οnclick="log()">log</button>
    				<button id="bt47" οnclick="num(0)">0</button>
    				<button id="bt48" οnclick="dot()">.</button>
    				<button id="bt49" οnclick="quyu()">%</button>
    				<button id="bt50" οnclick="equal()">=</button>
    		</div>
     
    	</div>
     
    	
    </div>
     
    </body>
    </html>

    下面是JS代码(代码语句都是非常简单的基础语法):

    //改进: 定义一个变量记录“=”的输入与否而不必每输入数字时都要检索一遍文本框内容
     
     
    var status=0;	//标记所输入的是数字还是运算符号
    var calcu=0;	//标记所要执行的方法是哪一个
     
     
    /*数字、括号及PI的输入*/
    function num(x){
    	var str0=document.getElementById('result0').value;
    	var str=document.getElementById('result').value;
    	if(str0.indexOf("=")>0){
    		document.getElementById('result0').value='';
    		document.getElementById('result').value='0';
    		str=document.getElementById('result').value;
    	}
    	if(str=="0")
    		str='';
     	str+=String(x);
     	document.getElementById('result').value=str;
     	status=0;
    }
    //输入. (未做是否包含“.”的判断)
    function dot(){
    	var str0=document.getElementById('result0').value;
    	var str=document.getElementById('result').value;
    	if(str0.indexOf("=")>0){
    		document.getElementById('result0').value='';
    		document.getElementById('result').value='0';
    		str=document.getElementById('result').value;
    	}
    	str=str+'.';
     	document.getElementById('result').value=str;
    }
     
     
    /*三角函数以及'1/'计算*/
    function sin(){
    	calcu=1;
    	cal();
    }
    function cos(){
    	calcu=2;
    	cal();
    }
    function tan(){
    	calcu=3;
    	cal();
    }
    function divide1(){
    	calcu=4;
    	cal();
    }
    function ln(){
    	calcu=5;
    	cal();
    }
    function log(){
    	calcu=6;
    	cal();
    }
    function cal(){
    	var str0=document.getElementById('result0').value;
    	var str=document.getElementById('result').value;
    	if(str0.indexOf("=")>0){
    		document.getElementById('result0').value='';
    		document.getElementById('result').value='0';
    		str=document.getElementById('result').value;
    	}
    	if(str=="0")
    		str='';
    	switch(calcu){                                   
            case 1: str+=String("sin(");break;               
            case 2: str+=String("cos(");break;               
            case 3: str+=String("tan(");break; 
            case 4: str+=String("1/");break;
            case 5: str+=String("ln(");break;
            case 6: str+=String("log(");break;
        }   
     	document.getElementById('result').value=str;
     	status=1;
    }
     
     
    /*   ^、√以及%的输入   */
    function pow1(){
    	calcu=1;
    	powS();
    }
    function pow2(){
    	calcu=2;
    	powS();
    }
    function quyu(){
    	calcu=3;
    	powS();
    }
    function powS(){
    	if(status == 1)
    		return;
    	var strpow0=document.getElementById('result0').value;
    	var strpow=document.getElementById('result').value;
    	if(strpow0.indexOf("=")>0){
    		document.getElementById('result0').value='';
    		/*document.getElementById('result').value='0';*/
    		strpow=document.getElementById('result').value;
    	}
    	switch(calcu){
    		case 1: strpow+=String('^');
     			    break;
    		case 2: if(strpow=='0')
    			  		strpow="√";
    			  	else{
    			  		strpow+=String('√');
    			  	}
    			    break;
    		case 3: strpow+=String("%");
    				break;
    	}
    	document.getElementById('result').value=strpow;
    	status=1;
    }
     
     
     
     
    /*   +-×÷ 运算   */
    function plus(){
    	calcu=1;
    	calculate();
    }
    function times(){
    	calcu=2;
    	calculate();
    }
    function divide(){
    	calcu=3;
    	calculate();		
    }
    function calculate(){
    	if(status==1)
    		return;
    	var str0=document.getElementById('result0').value;
    	var str=document.getElementById('result').value;
    	if(str0.indexOf("=")>0 ){
    		document.getElementById('result0').value='';
    		/*document.getElementById('result').value='0';*/
    		str=document.getElementById('result').value;
    	}
    	if(str=='')
    		str='0';
    	switch(calcu){
    		case 1: str+='+';break;
    		case 2: str+='×';break;
    		case 3: str+='÷';break;
    	}
     	document.getElementById('result').value=str;
     	status=1;
    }
    function minus(){
    	var str0=document.getElementById('result0').value;
    	var str=document.getElementById('result').value;
    	if(str0.indexOf("=")>0){
    		document.getElementById('result0').value='';
    		/*document.getElementById('result').value='-';*/
    		str=document.getElementById('result').value+'-';
    	}
     	else
     		str+='-';
     	document.getElementById('result').value=str;
    }
     
     
    //显示屏字符串为空
    function zero(){
    	document.getElementById('result0').value="";
     	document.getElementById('result').value="0";
    }
     
     
    //显示屏字符串减去最后一个字符
    function back(){
    	var str0=document.getElementById('result0').value;
    	var str=document.getElementById('result').value;
    	if(str0.indexOf("=")>0 || str=='')
    		return;
    	var str1=str.substr(0,(str.length)-1)
     	document.getElementById('result').value=str1;
    }
     
     
    //获取当前显示屏字符,判断所包含运算符,并做相关运算。
    function equal(){
    	var str0=document.getElementById('result').value;
    	if(str0=="")
    		return;
    	var str=str0.replace(/×/g,'*');		//用正则表达式进行全部替换
    	str=str.replace(/÷/g,'/');
    	str=str.replace(/π/g,'Math.PI');
    	if(str.indexOf("sin")>=0){
    		str=str.replace(/sin/g,'Math.round(Math.sin');
    		str+='*1000000)/1000000';
     
     
    		document.getElementById('result0').value=str0.concat("=");
    		document.getElementById('result').value=eval(str);
    		
    	}
    	else if(str.indexOf("cos")>=0){
    		str=str.replace(/cos/g,'Math.round(Math.cos');
    		str+='*1000000)/1000000';
    		document.getElementById('result0').value=str0.concat("=");
    		document.getElementById('result').value=eval(str);
    	}
    	else if(str.indexOf("tan")>=0){
    		str=str.replace(/tan/g,'Math.round(Math.tan');
    		str+='*1000000)/1000000';
    		document.getElementById('result0').value=str0.concat("=");
    		document.getElementById('result').value=eval(str);
    	}
    	else if(str.indexOf("^")>=0){
    		var pos=str0.indexOf('^');
    		var pow1=str0.substring(0,pos);
    		var pow2=str0.substring(pos+1,str0.length+1);
    		result=Math.pow(pow1, pow2);
    		document.getElementById('result0').value=str0.concat("=");
    		document.getElementById('result').value=eval(result);
    	}
    	else if(str.indexOf("√")>=0){
    		var pos=str0.indexOf('√');
    		var pow1=str0.substring(0,pos);
    		var pow2=str0.substring(pos+1,str0.length+1);
    		if(pow1==''){
    			result=Math.pow(pow2,0.5);
    			document.getElementById('result0').value=str0.concat("=");
    			document.getElementById('result').value=eval(result);
    		}
    		else{
    			result=Math.pow(pow2, 1/pow1);
    			document.getElementById('result0').value=str0.concat("=");
    			document.getElementById('result').value=eval(result);
    		}
    	}
    	else if(str.indexOf("ln")>=0){
    		var str=str0.replace(/ln/g,'Math.round(Math.log');
    		str+='*1000000)/1000000';
    		document.getElementById('result0').value=str0.concat("=");
    		document.getElementById('result').value=eval(str);
    	}
    	else if(str.indexOf("log")>=0){
    		var str=str0.replace(/log/g,'Math.log');
    		str+= '/Math.log(10)';
    		document.getElementById('result0').value=str0.concat("=");
    		document.getElementById('result').value=eval(str);
    	}
    	else{
    		result=(eval(str));
    		document.getElementById('result0').value=str0.concat("=");
    		document.getElementById('result').value=result;
    	}
    	var a=document.getElementById('result').value;
    	if(a=="Infinity")
    		document.getElementById('result').value='∞';
    	else if(a=="-Infinity")
    		document.getElementById('result').value='-∞';
    }
    function styleChange(){
    	if(document.getElementById('rows').style.display=='inline'){
    		document.getElementById('rows').style.display='none';
    		document.getElementById('sci').style.display='inline';
    	}
    	else if(document.getElementById('rows').style.display=='none'){
    		document.getElementById('rows').style.display='inline';
    		document.getElementById('sci').style.display='none';
    	}
    }
    

    下面是CSS代码(其中按钮效果部分参考了纯CSS滑动按钮特效代码):

    body { 
     
    	font-size:24px; 
    	font-family:Arial, Georgia, "Times New Roman", Times, serif; 
    	color:#555; 	
    	text-align:center; 		
    	background-color:#555; 		
    }
    body div{
    	align:center;
    	margin-top:5px;	
    } 
    #calculator{
    	align:center;
    	350px;
      height:550px;
    	margin:10px auto;
    	border:#fff 2px solid;	
    	overflow:hidden;      
    	background-color:#f2f2f2; 	
     
    }
     
    .rescult{
    	align:center;
    	padding:10px 5px 0px 5px;
    }
    #result,#result0{
    	300px;
    	height:40px;
    	font-size:35px;
    	text-align:right;
    	direction:ltr; 
    	border:#C0C0C0;
    	overflow:hidden;      
    	background-color:#C0C0C0;
    	word-wrap : normal;	
    }
    #result0{
      font-size:25px;
    }
    section {
      float: left;
      100px;
      padding: 0px 200px 10px 20px;
      height: 50px;
    }
     
    .checkbox {
      position: relative;
      display: inline-block;    
    }
     
    .checkbox label {
      font-size:20px;
      text-align: center;
      padding-top: 5px;
       90px;
      height: 30px;
      position: relative;
      display: inline-block;
      border-radius: 46px;        
      -webkit-transition: 0.4s;   
      transition: 0.4s;
    }
    .checkbox label:after {    
      content: '';
      position: absolute;
      padding-top: 20px;
       45px;
      height: 20px;
      border-radius: 40%;
      left: 0;                
      top: -5px;
      z-index: 2;       
      background: #f2f2f2;   
      box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);   
      -webkit-transition: 0.4s;  
      transition: 0.4s;
    }
    .checkbox input {
      position: absolute;
      left: 0;
      top: 0;
       100%;      
      height: 100%;
      z-index: 5;       
      opacity: 0;      
      cursor: pointer;  
    }
     
    .checkbox input:hover + label:after {
      box-shadow: 0 2px 15px 0 rgba(0, 0, 0, 0.2), 0 3px 8px 0 rgba(0, 0, 0, 0.2);
    }
    .checkbox input:checked + label:after {
      left: 45px;                    
    
    }
    .model-1 .checkbox input:checked + label {
      background:#ccc ;          
    }
    .model-1 .checkbox input:checked + label:after {
      background:#f2f2f2;          
    }
     
     
     
    #rows{
      
    	align:center;
    	padding:0 3px;
     
    }
    #below{
    	margin-top:0px;
    	margin-left:25px;
    	margin-bottom: 30px;
    	300px;
    }
    #left{
    	margin-top:0px;
    	float:left;
    }
    #right{
    	margin-top:10px;
    	float:right;
    }
    .row1,.row2,.row3,#below{
    	align:center;	
    }
    .row3{
    	margin-bottom: 0px;
    }
    #bt1,#bt2,#bt3,#bt4,#bt5,#bt6,#bt7,#bt8,#bt9,#bt10,#bt11,#bt12,#bt13,#bt14,#bt15,#bt16,#bt17,#bt18{
    	font-size:18px;
    	70px;
    	height:70px;
    	background-color:#eaeaea; 
    	cursor:pointer;
     
    }
    #bt16{
    	145px;
    }
    #bt18{
    	height:140px;
    }
    #sci{
        display:none;
    }
    #sci button{
      font-size:18px;
      55px;
      height:55px;
      background-color:#eaeaea; 
      cursor:pointer;
     
    }
    #record{
      float:right;
      font-size:15px;
      color:#555;
    }
    #record:hover{
      color:red;
    }
    

    转载于:https://blog.csdn.net/sweet___smile/article/details/50417211

  • 相关阅读:
    疫情信息爬取及可视化 app
    计算机组成与体系结构——校验码知识点
    计算机组成与体系结构——其他知识点(二)
    计算机组成与体系结构——其他知识点(一)
    计算机组成与体系结构——流水线相关知识点(常考计算)
    计算机组成与体系结构——数据的表示
    C语言经典试题--指针
    软件工程--个人课程总结
    学生信息管理系统--基于jsp技术和MySQL的简单增删改查
    计算最长英语单词链
  • 原文地址:https://www.cnblogs.com/smileZAZ/p/14217198.html
Copyright © 2011-2022 走看看