使用html+css+javaScript 完成计算器

一、先用html与css搭建骨架

思路:

  1. 将计算器的数字按钮放进一个表格里,
  2. 再通过css修饰
  3. 然后对指定的数字按钮或功能按钮添加事件
  4. 将需要计算的式子放进一个字符串里,最后通过全局方法eval( )计算出来

html的骨架搭建

//这里的用一个 div 将内容包住, 然后再align="center" 将计算机居中
<div align="center">
	<div class="main_div">
		<div class="top_div">wswsjwq的计算器</div>
		<textarea id="main_div_area" cols="35px" rows="3px"></textarea>
		<table class="mian_div_table" cellpadding="0" cellspacing="10">
			<tr>
				<td class="cell_nub">7</td>
				<td class="cell_nub">8</td>
				<td class="cell_nub">9</td>
				<td class="cell_nub">+</td>
			</tr>
			<tr>
				<td class="cell_nub">4</td>
				<td class="cell_nub">5</td>
				<td class="cell_nub">6</td>
				<td class="cell_nub">-</td>
			</tr>
			<tr>
				<td class="cell_nub">1</td>
				<td class="cell_nub">2</td>
				<td class="cell_nub">3</td>
				<td class="cell_nub">*</td>
			</tr>
			<tr>
				<td class="cell_nub">0</td>
				//使用οnclick="函数()" 添加点击事件
				<td onclick="clearArea()">C</td>
				<td onclick="sum()">=</td>
				<td class="cell_nub">/</td>
			</tr>
		</table>
	</div>
</div>

效果:
在这里插入图片描述

css点缀修饰

		<style type="text/css">
			.main_div {
				width: 500px;
				height: 350px;
				background-color: #F0F8FF;
			}
			.top_div {
				height: 50px;
				line-height: 50px;
				background-color: #DFE9F5;
				font-weight: bold;
				font-size: x-large;
				font-family: "宋体";
			}
			.mian_div_table {
				 width: 500px;
				 height: 150px;
			}
			.mian_div_table td {
				padding-left: 40px;
				font-size: 30px;
				background-color: #A9A9A9;
			}
			#main_div_area {
				font-size: xx-large;
			}
		</style>

效果:
在这里插入图片描述
最后的大头javaScript:

	<script type="text/javascript">
		// 获取到每个数字按键的document对象
		var Btn = document.getElementsByClassName("cell_nub");
		//获取文本域对象,***注意此处只能使用id来获取文本域对象***
		var areaObj = document.getElementById("main_div_area");
		//定义一个字符串来接收输入内容
		var Str = "";
		var arr = [];
		//给同一个类添加事件
		for (var i = 0; i < Btn.length; i++) {
		  arr.push(i);
		  arr.forEach((value) => {
			Btn[value].onclick = function () {
				//打印出按压结果以便观看
			  console.log("按压值: "+Btn[value].innerHTML);
			  //将值传给拼接字符串的方法add()
			  add(Btn[value].innerHTML);
			};
		  });
		}
		
		//字符串拼接方法
		function add(temp){
			console.log("拼接字符串方法执行");
			console.log(Str.charAt(Str.length-1));
			//如果此时的按压值是+-*/与上一个字符重复,就要覆盖上一次的符号
			if((Str.charAt(Str.length-1)=="+"||Str.charAt(Str.length-1)=="-"||Str.charAt(Str.length-1)=="*")&&(temp=="+"||temp=="-"||temp=="*"||temp=="/")){
				console.log("此时的按压值 :"+temp);
				//截取0到最后一个,不包括最后一个
				Str=Str.substring(0,Str.length-1);
				console.log("删除重复符号后"+Str);
				Str+=temp;
				console.log("添加后"+Str);
			}else{
				Str+=temp;
			}
			areaObj.value = Str;
			console.log("字符串Str="+Str);
		}
		//使用eval()求和的方法
		function sum(){
			console.log("求和方法执行");
			console.log("结果是: "+eval(Str));
			areaObj.value = eval(Str);
		}
		//清除的方法
		function clearArea(){
			console.log("清除方法执行");
			Str="";
			console.log("清除后"+Str);
			areaObj.value = Str;
		}
	</script>

当我写javaScript时候遇到的问题;

  1. 就是获取文本域的标签对象(也叫文本域的DOM对象)时候,我给那个文本域标签使用class命名,获取DOM对象时候,无法修改文本域里的内容
    如图:
    在这里插入图片描述

在这里插入图片描述

点击数字按键并不能将按键的内容放到文本域里

  1. 在我想将获取的计算式子放到文本域时候老想着使用
areaObj.innerHTML = "我是获取的按钮值";

这样无法获取到,因为文本域标签时功能性标签,并不是想div那样的包裹标签,
所以应该用value

areaObj.value = "我是获取的按钮值";
  1. 还要再注意一下给一类标签添加事件的代码块
			var arr = [];
			//用for循环给获取的一组类标签加事件
		for (var i = 0; i < Btn.length; i++) {
		  arr.push(i);
		  arr.forEach((value) => {
			Btn[value].onclick = function () {
				//打印出按压结果以便观看
			  console.log("按压值: "+Btn[value].innerHTML);
			  //将值传给拼接字符串的方法add()
			  add(Btn[value].innerHTML);
			};
		  });
		}

如果foreach忘记的兄弟们 点这里

  1. 还有一点
    如果要在javaScript里获取对象, 那就要写在body的后面

这是由于脚本语言是从上向下加载顺序有关


若有错误, 及时提出,作者秒回

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lion Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值