手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >javascript-简单的计算器实现步骤分解(附图)
javascript-简单的计算器实现步骤分解(附图)
摘要:知识点:1、数学运算“+,-,*,/”的使用2、输入内容的判断,对于事件对象的来源的判断效果:代码:复制代码代码如下:#calculate{...

知识点:

1、数学运算“+,-,*,/”的使用

2、输入内容的判断,对于事件对象的来源的判断

效果:

javascript-简单的计算器实现步骤分解(附图)1

代码:

复制代码 代码如下:

<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 'Microsoft yahei';

}

#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='num' />

</label></td>

<td><input type="button" value="8" _type='num' /></td>

<td><input type="button" value="9" _type='num' /></td>

<td><input type="button" value="/" _type='op' /></td>

</tr>

<tr>

<td><input type="button" value="4" _type='num' /></td>

<td><input type="button" value="5" _type='num' /></td>

<td><input type="button" value="6" _type='num' /></td>

<td><input type="button" value="*" _type='op' /></td>

</tr>

<tr>

<td><input type="button" value="1" _type='num' /></td>

<td><input type="button" value="2" _type='num' /></td>

<td><input type="button" value="3" _type='num' /></td>

<td><input type="button" value="-" _type='op' /></td>

</tr>

<tr>

<td><input type="button" value="0" _type='num' /></td>

<td><input type="button" value="+/-" _type='+/-' /></td>

<td><input type="button" value="." _type='.' /></td>

<td><input type="button" value="+" _type='op' /></td>

</tr>

<tr>

<td colspan="2" id="debug"><input type="button" value="backspace" _type='bs' /></td>

<td><input type="button" value="C" _type='cls' /></td>

<td><input type="button" value="=" _type='eval' /></td>

</tr>

</tbody>

</table>

<script>

//计算对象

var operateExp={

'+':function(num1,num2){return num1+num2;},

'-':function(num1,num2){return num1-num2;},

'*':function(num1,num2){return num1*num2;},

'/':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==='bs'){//退格键

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==='num'){//数字键

if(num==='0'||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

详细分解:

第一:分支计算部分没有使用switch 语句,使用了名值对的形式。

复制代码 代码如下:

//计算对象

var operateExp={

'+':function(num1,num2){return num1+num2;},

'-':function(num1,num2){return num1-num2;},

'*':function(num1,num2){return num1*num2;},

'/':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==='bs'){//退格键

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==='num'){//数字键

if(num==='0'||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;

}

第五:过滤操作数,完成计算。

复制代码 代码如下:

//计算函数

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);

}

PS:这里再为大家推荐两款本站的在线计算器,都是采用js实现,且功能强大,相信对于大家深入了解JavaScript数学运算及web设计会有所帮助:

在线标准计算器:http://tools.jb51.net/jisuanqi/jsq

在线科学计算器:http://tools.jb51.net/jisuanqi/jsqkexue

【javascript-简单的计算器实现步骤分解(附图)】相关文章:

JavaScript 预解析的原理及实现

javascript实现table表格隔行变色的方法

Javascript类型转换的规则实例解析

javascript实现日期按月份加减

详解JavaScript中的表单验证

javascript实现表格增删改操作实例详解

javascript实现简单的进度条

javascript实现可拖动变色并关闭层窗口实例

javascript常用的方法分享

javascript实现树形菜单的方法

精品推荐
分类导航