首頁 > web前端 > js教程 > 主體

javascript-簡單的​​計算器實作步驟分解

高洛峰
發布: 2017-02-04 14:08:43
原創
922 人瀏覽過

知識要點: 
  1、數學運算「+,-,*,/」的使用 
  2、輸入內容的判斷,對於事件對象的來源的判斷 
效果: 

分解

javascript-簡單的​​計算器實作步驟分解

: 

第一:分支計算部分沒有使用switch 語句,使用了名值對的形式。 

<style> 
#calculate { 
line-height: 60px; 
text-align: center; 
background: #ccc; 
font-size: 16px; 
font-weight: bold; 
} 
#calculate tbody input{ 
width: 100%; 
height: 60px; 
background:#033; 
color: #fff; 
font: bold 16px/1em &#39;Microsoft yahei&#39;; 
} 
#calculate tbody td{ 
width: 25%; 
background: #fff; 
} 
#calculate_outPut{ 
font-size: 20px; 
letter-spacing:2px; 
background:#fff; 
height: 40px; 
border: none; 
text-align: right; 
width: 100%; 
} 
</style> 
<table width="300" border="0" cellspacing="1" cellpadding="0" id="calculate"> 
<thead > 
<tr> 
<td colspan="4" align="right"><input id="calculate_outPut" value="0" disabled="disabled"></td> 
</tr> 
</thead> 
<tbody id="calculate_num"> 
<tr> 
<td><label> 
<input type="button" name="button" id="button" value="7" _type=&#39;num&#39; /> 
</label></td> 
<td><input type="button" value="8" _type=&#39;num&#39; /></td> 
<td><input type="button" value="9" _type=&#39;num&#39; /></td> 
<td><input type="button" value="/" _type=&#39;op&#39; /></td> 
</tr> 
<tr> 
<td><input type="button" value="4" _type=&#39;num&#39; /></td> 
<td><input type="button" value="5" _type=&#39;num&#39; /></td> 
<td><input type="button" value="6" _type=&#39;num&#39; /></td> 
<td><input type="button" value="*" _type=&#39;op&#39; /></td> 
</tr> 
<tr> 
<td><input type="button" value="1" _type=&#39;num&#39; /></td> 
<td><input type="button" value="2" _type=&#39;num&#39; /></td> 
<td><input type="button" value="3" _type=&#39;num&#39; /></td> 
<td><input type="button" value="-" _type=&#39;op&#39; /></td> 
</tr> 
<tr> 
<td><input type="button" value="0" _type=&#39;num&#39; /></td> 
<td><input type="button" value="+/-" _type=&#39;+/-&#39; /></td> 
<td><input type="button" value="." _type=&#39;.&#39; /></td> 
<td><input type="button" value="+" _type=&#39;op&#39; /></td> 
</tr> 
<tr> 
<td colspan="2" id="debug"><input type="button" value="backspace" _type=&#39;bs&#39; /></td> 
<td><input type="button" value="C" _type=&#39;cls&#39; /></td> 
<td><input type="button" value="=" _type=&#39;eval&#39; /></td> 
</tr> 
</tbody> 
</table> 
<script> 
//计算对象 
var operateExp={ 
&#39;+&#39;:function(num1,num2){return num1+num2;}, 
&#39;-&#39;:function(num1,num2){return num1-num2;}, 
&#39;*&#39;:function(num1,num2){return num1*num2;}, 
&#39;/&#39;:function(num1,num2){return num2===0?0:num1/num2;} 
} 
//计算函数 
var operateNum=function(num1,num2,op){ 
if(!(num1&&num2))return; 
//保证num1,num2都为数字 
num1=Number(num1); 
num2=Number(num2); 
//不存在操作符,返回num1; 
if(!op)return num1; 
//匹配运算公式 
if(!operateExp[op])return 0; 
return operateExp[op](num1,num2); 
} 
//显示面板 
var calculate_outPut=document.getElementById("calculate_outPut"); 
//操作面板 
var calculate_num=document.getElementById("calculate_num"); 
var result=0;//计算结果 
var isReset=false;//是否重新设置 
var operation;//操作符 
//设置显示屏的值 
function setScreen(num){ 
calculate_outPut.value=num; 
} 
//获取显示屏的值 
function getScreen(){ 
return calculate_outPut.value; 
} 
//添加点击事件 
calculate_num.onclick=function(e){ 
var ev = e || window.event; 
var target = ev.target || ev.srcElement; 
if(target.type=="button"){ 
var mark=target.getAttribute("_type");//获取当前点击button的自定义的属性。 
var value=target.value;//获取当前的值 
var num=getScreen();//获取当前框的值 
if(mark===&#39;bs&#39;){//退格键 
if(num==0)return; 
var snum=Math.abs(num).toString(); 
if(snum.length<2) 
setScreen(0); 
else 
setScreen(num.toString().slice(0,-1)); 
} 
if(mark===&#39;num&#39;){//数字键 
if(num===&#39;0&#39;||isReset){//有操作符或显示屏为0 
setScreen(value); 
isReset=false; 
return; 
} 
setScreen(num.toString().concat(value)); 
} 
if(mark==="."){//小数点 
var hasPoint=num.toString().indexOf(".")>-1; 
if(hasPoint){ 
if(isReset){ 
setScreen("0"+value); 
isReset=false; 
return; 
} 
return; 
} 
setScreen(num.toString().concat(value)); 
} 
if(mark==="+/-"){//正负号 
setScreen(-num); 
} 
if(mark==="op"){//如果点击的是操作符则设计第一个操作数 
if(isReset)return; 
isReset=true; 
if(!operation){ 
result=+num; 
operation=value; 
return; 
} 
result=operateNum(result,num,operation); 
setScreen(result); 
operation=value; 
} 
if(mark==="cls"){//清零 
result=0; 
setScreen(result); 
isReset=false; 
} 
if(mark==="eval"){//计算 
if(!operation)return; 
result=operateNum(result,num,operation); 
setScreen(result); 
operation=null; 
isReset=false; 
} 
} 
} 
</script> 
View Code
登入後複製

第二:物件事件的屬性的使用,取得點擊物件的類型。利用事件冒泡,捕捉事件,並對事件進行分類。 

//计算对象 
var operateExp={ 
&#39;+&#39;:function(num1,num2){return num1+num2;}, 
&#39;-&#39;:function(num1,num2){return num1-num2;}, 
&#39;*&#39;:function(num1,num2){return num1*num2;}, 
&#39;/&#39;:function(num1,num2){return num2===0?0:num1/num2;} 
}
登入後複製

第三:全域變數的使用,利用全域變數對局部操作進度進行控制。 (狀態控制)

calculate_num.onclick=function(e){ 
var ev = e || window.event; 
var target = ev.target || ev.srcElement; 
if(target.type=="button"){ 
var mark=target.getAttribute("_type");//获取当前点击button的自定义的属性。 
var value=target.value;//获取当前的值 
var num=getScreen();//获取当前框的值 
if(mark===&#39;bs&#39;){//退格键 
if(num==0)return; 
var snum=Math.abs(num).toString(); 
if(snum.length<2) 
setScreen(0); 
else 
setScreen(num.toString().slice(0,-1)); 
} 
if(mark===&#39;num&#39;){//数字键 
if(num===&#39;0&#39;||isReset){//有操作符或显示屏为0 
setScreen(value); 
isReset=false; 
return; 
} 
setScreen(num.toString().concat(value)); 
} 
if(mark==="."){//小数点 
var hasPoint=num.toString().indexOf(".")>-1; 
if(hasPoint){ 
if(isReset){ 
setScreen("0"+value); 
isReset=false; 
return; 
} 
return; 
} 
setScreen(num.toString().concat(value)); 
} 
if(mark==="+/-"){//正负号 
setScreen(-num); 
} 
if(mark==="op"){//如果点击的是操作符则设计第一个操作数 
if(isReset)return; 
isReset=true; 
if(!operation){ 
result=+num; 
operation=value; 
return; 
} 
result=operateNum(result,num,operation); 
setScreen(result); 
operation=value; 
} 
if(mark==="cls"){//清零 
result=0; 
setScreen(result); 
isReset=false; 
} 
if(mark==="eval"){//计算 
if(!operation)return; 
result=operateNum(result,num,operation); 
setScreen(result); 
operation=null; 
isReset=false; 
} 
} 
}
登入後複製

第四:對頁面操作進行分離,解耦合。 

var result=0;//计算结果 
var isReset=false;//是否重新设置 
var operation;//操作符
登入後複製

第五:過濾運算元,完成計算。 

//设置显示屏的值 
function setScreen(num){ 
calculate_outPut.value=num; 
} 
//获取显示屏的值 
function getScreen(){ 
return calculate_outPut.value; 
}
登入後複製
更多javascript-簡單的​​計算器實現步驟分解相關文章請關注PHP中文網!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!