使用javascript实现计算器总结

 

效果展示:

思路:

用html实现计算器的基本外观结构

用css设计每个部分的样式,颜色边框等

使用js实现计算的算法,DOM事件的反应。

知识点总结:

html部分:

  1. 结构分为上下两部分,上部分显示输出,下部分输入。
  2. 输出分为结果和记录。
  3. 表格的结构为table->tr->th

Js部分:

  1. 每次输入后都会有一次响应。
  2. 输入获取的当前字符。
  3. 有两个状态,状态1为输入第一个操作数和运算符,状态2为输入第二个操作数。
  4. 在状态1和状态2下输入数字,运算符,C,CE,小数点,负号,等于号,删除号等待分别该怎么响应?是否要切换状态,是否要清空记录。
  5. 小数和负数时遇到删除怎么操作。
  6. 合理使用全局变量和局部变量。
  7. 数组的使用:var I = new Array(); 它的方法有push(),pop(),length.
  8. 常用的一些静态方法:Math.floor(),Math.round(),Math.pow(),
  9. 把字符变成数字用Numeber()对象,它还有判断是否为整数,浮点数等静态方法。
  10. Document类下的获取id的方法,根据id来修改元素的属性和内容。
  11. 事件反应:点击,放上鼠标,移开鼠标等等。
  12. 在事件反应时用this传递id指针。

Css总结:

  1. 盒子的概念:一个元素由内容+内填充(透明的)+border(不透明)+外填充(透明)四部分构成。分别设计每个部分的属性。
  2. Table中让所有单元格合并border是,在在外面的border元素中设置border-collapse:collapse;
  3. 元素的width和height设置的是内部内容的大小,其他三部分默认设置。
  4. 颜色设置。 

代码:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
	<style type="text/css">
		table{
			border-collapse:collapse;
		}
		th{
			height: 80px;
			width: 125px;
			border: 1px solid #e6e6e6;
			margin: 0px 0px 0px 0px;
			padding:0px;
		}
		tr{
			
		}
	</style>
</head>
<body>
	<div style="height:515px;width:500px;border:solid #dbdbdb;margin:auto;">
		<div style="border: solid #dbdbdb; "> 
			<p id="output" style="height:30px;margin:0;width:480px;text-align:right;"></p>
			<p id ="result" style="height:70px;margin:0;width:450px;font-size:400%;text-align:right;margin-bottom: 0px;">0</p>
		</div>
		<div style="height:400px;width:500px;">
			<table style="height:400px width:500px">
				<tr>
					<th id="CE" onclick="i='CE';response();" onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'">CE</th><th id="C" onclick="i='C';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'">C</th><th id="#" onclick="i='#';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/shanchu.png" alt=""></th><th id="/" onclick="i='/';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/chuhao.png" alt=""></th>
				</tr>
				<tr>
					<th id="i7" onclick="i='7';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_7.png" alt=""></th><th id="i8" onclick="i='8';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_8.png" alt=""></th><th id="i9" onclick="i='9';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_9.png" alt=""></th><th id="*" onclick="i='*';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/chenghao.png" alt=""></th>
				</tr>
				<tr>
					<th id="i4" onclick="i='4';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_4.png" alt=""></th><th id="i5" onclick="i='5';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_5.png" alt=""></th><th id="i6" onclick="i='6';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_6.png" alt=""></th><th id="-" onclick="i='-';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/jianhao.png" alt=""></th>
				</tr>
				<tr>
					<th id="i1" onclick="i='1';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test.png" alt=""></th><th id="i2" onclick="i='2';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_2.png" alt=""></th><th id="i3" onclick="i='3';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_3.png" alt=""></th><th id="+" onclick="i='+';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/jiahao.png" alt=""></th>
				</tr>
				<tr>
					<th id="$" onclick="i='$';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/jianhao.png" alt=""></th><th id="i0" onclick="i='0';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/icon-test_1.png" alt=""></th><th id="." onclick="i='.';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/xiaoshudian.png" alt=""></th><th id="=" onclick="i='=';response();"onmouseover="style.background='#e6e6e6'" onmouseout="style.background='#ffffff'"><img src="img/dengyu.png" alt=""></th>
				</tr>	
			</table>
		</div>
	</div>
	<script>
		var i;
		var opr1 = 0;
		var opr2 = 0;
		var sta=1;
		var n1=1;
		var tag1 = 0;
		var n2=1;
		var tag2 = 0;
		var cache = new Array();
		var s = 1;
		function response(){
			if(sta == 1){
				if(i>='0' && i<='9'){
					if(cache[0] == '='){
						opr1 = 0;
						cache.pop();
						if(tag1 == 1 && opr1 >=0) opr1 = opr1 + Number(i) / Math.pow(10,n1++);
						else if(tag1 == 1 && opr1 < 0)opr1 = opr1 - Number(i) / Math.pow(10,n1++);
						else if(tag1 == 0 && opr1 >=0)opr1 = opr1 * 10 + Number(i);
						else opr1 = opr1 * 10 - Number(i);
					}
					else {
						if(tag1 == 1 && opr1 >=0) opr1 = opr1 + Number(i) / Math.pow(10,n1++);
						else if(tag1 == 1 && opr1 < 0)opr1 = opr1 - Number(i) / Math.pow(10,n1++);
						else if(tag1 == 0 && opr1 >=0)opr1 = opr1 * 10 + Number(i);
						else opr1 = opr1 * 10 - Number(i);
					}
					 document.getElementById("result").innerHTML = opr1;
				}
				else if(i == "$"){
					opr1 = -opr1;
					if(tag1 == 1 && Number.isInteger(opr1))document.getElementById("result").innerHTML = opr1.toString() + ".";
					else document.getElementById("result").innerHTML = opr1;
				}
				else if(i == "#" && cache[0] != "="){
					if(Number.isInteger(opr1)){
						if(tag1 == 1)tag1=0;
						else if(tag1==0 && opr1>=0)opr1 = Math.floor(opr1 / 10);
						else if(tag1==0 && opr1 < 0)opr1 = Math.round(opr1 / 10);
					}
					else{
						if(opr1 >= 0){
						    var a = (opr1 - Math.floor(opr1)) * Math.pow(10,n1-2);
						    opr1 = Math.floor(opr1) + (Math.floor(a) / Math.pow(10, n1-2));
						    n1--;
					    }
					    else{
					    	opr1 = -1 * opr1;
					    	var a = (opr1 - Math.floor(opr1)) * Math.pow(10,n1-2);
						    opr1 = Math.floor(opr1) + (Math.floor(a) / Math.pow(10, n1-2));
						    n1--;
						    opr1 = -1 * opr1;
					    }
					}
					if(tag1 == 1 && Number.isInteger(opr1))document.getElementById("result").innerHTML = opr1.toString() + ".";
					else document.getElementById("result").innerHTML = opr1;
				}
				else if(i == '.'){
					tag1 = 1;
					if(Number.isInteger(opr1))document.getElementById("result").innerHTML = (opr1.toString() + ".");
				}
				else if(i=='+' || i=='-' || i=='*' || i=='/'){
					if(cache[0] == '=')cache.pop();
					op = i;
					sta = 2;
					n1 = 1;
					tag1 = 0;
					cache[cache.length] = opr1.toString();
					cache[cache.length] = i;
					var outputs ="";
					for(j = 0;j<cache.length;j++){outputs = outputs + cache[j];}
					document.getElementById("output").innerHTML = outputs;
				}
				else if(i == "="){
					while(cache.length!=0)cache.pop();
					document.getElementById("output").innerHTML = "";
					document.getElementById("result").innerHTML = opr1;
					cache.push('=');
					n1=1;
					tag1 = 0;
				}
				else if(i == 'C' || i == "CE"){
					n1=1;
					tag1 = 0;
					while(cache.length!=0)cache.pop();
					opr1=0;
					document.getElementById("output").innerHTML = "";
					document.getElementById("result").innerHTML = opr1;
				}
			}
			else if(sta == 2){
				if(i>='0' && i<='9'){
					s = 0;
					if(tag2 == 1 && opr2 >=0) opr2 = opr2 + Number(i) / Math.pow(10,n2++);
					else if(tag2 == 1 && opr2 < 0)opr2 = opr2 - Number(i) / Math.pow(10,n2++);
					else if(tag2 == 0 && opr2 >=0)opr2 = opr2 * 10 + Number(i);
					else opr2 = opr2 * 10 - Number(i);
					document.getElementById("result").innerHTML = opr2;
				}
				else if(i == "$"){
					opr2 = -opr2;
					if(tag2 == 1 && Number.isInteger(opr2))document.getElementById("result").innerHTML = opr2.toString() + ".";
					else document.getElementById("result").innerHTML = opr2;
				}
				else if(i == "."){
					tag2 = 1;
					if(Number.isInteger(opr2))document.getElementById("result").innerHTML = opr2.toString() + ".";
				}
				else if(i == "#" && s==0){
					if(Number.isInteger(opr2)){
						if(tag2 == 1)tag2=0;
						else if(tag2==0 && opr2>=0)opr2 = Math.floor(opr2 / 10);
						else if(tag2==0 && opr2 < 0)opr2 = Math.round(opr2 / 10);
					}
					else{
						if(opr2 >= 0){
						    var a = (opr2 - Math.floor(opr2)) * Math.pow(10,n2-2);
						    opr2 = Math.floor(opr2) + (Math.floor(a) / Math.pow(10, n2-2));
						    n2--;
					    }
					    else{
					    	opr2 = -1 * opr2;
					    	var a = (opr2 - Math.floor(opr2)) * Math.pow(10,n2-2);
						    opr2 = Math.floor(opr2) + (Math.floor(a) / Math.pow(10, n2-2));
						    n2--;
						    opr2 = -1 * opr2;
					    }
					}
					if(tag2 == 1 && Number.isInteger(opr2))document.getElementById("result").innerHTML = opr1.toString() + ".";
					else document.getElementById("result").innerHTML = opr2;
				}
				else if(i=='+' || i=='-' || i=='*' || i=='/'){
					if(s==1){
						if(i == cache[cache.length-1]){}
						else {
							cache[cache.length-1] = i;
							var outputs="";
							for(j = 0;j<cache.length;j++){
								outputs = outputs + cache[j];
							}
							document.getElementById("output").innerHTML = outputs;
						}
					}
					else{
						switch (cache[cache.length-1]) {
							case '+':
							    opr1 = opr1 + opr2;
							    break;
							case '*':
							    opr1 = opr1 * opr2;
							    break;
							case '-':
							    opr1 = opr1 - opr2;
							    break;
						    case '/':
							    opr1 = opr1 / opr2;
							    break;
							default:
							    break;
						}
					    cache.push(opr2.toString());
					    cache.push(i);
					    var outputs ="";
					    for(j = 0;j<cache.length;j++){
					    	outputs = outputs + cache[j];
					    }
					    document.getElementById("output").innerHTML = outputs;
					    document.getElementById("result").innerHTML = opr1;
					    opr2 = 0;
					    tag2 = 0;
					    n2 = 1;
					    s=1;
				    }
				}
				else if(i == "="){
					switch (cache[cache.length-1]) {
						case '+':
							opr1 = opr1 + opr2;
							break;
						case '*':
							opr1 = opr1 * opr2;
							break;
						case '-':
							opr1 = opr1 - opr2;
							break;
						case '/':
							opr1 = opr1 / opr2;
							break;
						default:
							break;
					}
					while(cache.length!=0)cache.pop();
					document.getElementById("output").innerHTML = "";
					document.getElementById("result").innerHTML = opr1;
					opr2 = 0;
					sta = 1;
					cache.push('=');
					tag2 = 0;
					n2 = 1;
				}
				else if(i == 'C'){
					while(cache.length!=0)cache.pop();
					opr1=0;
					opr2=0;
					document.getElementById("output").innerHTML = "";
					document.getElementById("result").innerHTML = opr1;
					sta = 1;
					tag2 = 0;
					n2 = 1;
				}
				else if(i == "CE"){
					opr2 = 0;
					tag2 = 0;
					n2 = 1;
					var outputs ="";
					for(j = 0;j<cache.length;j++){
						outputs = outputs + cache[j];
					}
					document.getElementById("output").innerHTML = outputs;
					document.getElementById("result").innerHTML = opr2;
				}
			}
		}
	</script>
</body>
</html>

 

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算器网页设计: 首先,我们需要使用HTML来构建基本的网页结构。可以使用 `<div>` 元素来创建整个网页的容器。 接下来,我们可以在网页上创建一个显示屏区域,用来显示用户的输入和计算结果。可以使用 `<input>` 元素来创建显示屏,设置其 `type` 属性为 `"text"`,并给它一个唯一的 `id`。 然后,我们可以在网页上创建一个按钮区域,用来输入数字和进行计算。可以使用 `<button>` 元素来创建每个按钮,设置其 `value` 属性为对应的数字或操作符,设置其 `onclick` 属性为一个JavaScript函数,在函数中通过操作显示屏区域的值来实现点击按钮时的效果。 另外,我们也可以使用CSS样式来美化网页。可以使用 `margin`、`padding` 和 `border` 属性来调整元素之间的间距和边框样式。可以使用 `background-color` 和 `color` 属性来设置元素的背景色和文字颜色。可以使用 `font-size` 和 `font-family` 属性来调整文字的大小和字体。可以使用 `width` 和 `height` 属性来调整元素的尺寸等。 最后,我们可以在CSS样式中使用 `@media` 查询来实现响应式设计,使得网页可以在不同屏幕尺寸下具有良好的显示效果。 总结起来,使用HTMLCSS来设计计算器网页,需要构建基本的网页结构、创建显示屏区域和按钮区域,设置按钮的点击效果和样式,以及通过CSS样式来美化网页。最终的效果应该是一个包含显示屏和按钮的界面,用户可以通过点击按钮来输入数字和进行计算。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值