HTML+CSS+JavaScript写计算器

思维导图:

 

代码(HTML)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>calculator</title>
		<link rel="stylesheet" type="text/css" href="calculator.css"/>
	</head>
	<body>
		<div id="all">
			<div id="up">
				<div id="reset_1">
					<button id="reset" class="btn" onclick="calculator1('C')">C</button>
				</div>
				<div id="screen">0</div>
			</div>
			<div id="down">
				<button id="seven" class="btn" onclick="calculator(7)">7</button>
				<button id="eight" class="btn" onclick="calculator(8)">8</button>
				<button id="nine" class="btn" onclick="calculator(9)">9</button>
				<button id="add" class="btn" onclick="calculator1('+')">+</button>
				
				<button id="four" class="btn" onclick="calculator(4)">4</button>
				<button id="five" class="btn" onclick="calculator(5)">5</button>
				<button id="six" class="btn" onclick="calculator(6)">6</button>
				<button id="multiply" class="btn" onclick="calculator1('*')">*</button>
				
				<button id="one" class="btn" onclick="calculator(1)">1</button>
				<button id="two" class="btn" onclick="calculator(2)">2</button>
				<button id="three" class="btn" onclick="calculator(3)">3</button>
				<button id="subtract" class="btn" onclick="calculator1('-')">-</button>
				
				<button id="zero" class="btn" onclick="calculator(0)">0</button>
				<button id="point" class="btn" onclick="calculator1('.')">.</button>
				<button id="divide" class="btn" onclick="calculator1('/')">/</button>
				<button id="equal" class="btn" onclick="calculator1('=')">=</button>
			</div>
		</div>
	</body>
	<script>
		
		array=new Array();
		function calculator(n){
			//判断数组中是否有内容  有内容就计算更新数组  没有内容直接存放数据
			//数组中无内容
			if(array.length==0){
				document.getElementById("screen").innerHTML=n;
				array.push(n);
				console.log("数组中无内容,数据进组"+"  array值: "+array);
			}else if(array.length==1){
				//数组中只有一个符号或者数字
				let varia=array[0];
				varia=Number(varia)
	            if(isNaN(varia)){
					//说明数组长度1且为符号
					console.log("说明数组长度1且为符号");//+isNaN(varia)
					if(array[0]=='.'){
						array[0]=0.1*n;
						document.getElementById("screen").innerHTML='0.'+n;
					}else if(array[0]=='+'){
						array[0]=n;
						document.getElementById("screen").innerHTML=n;
					}else if(array[0]=='-'){
						array[0]=0-n;
						document.getElementById("screen").innerHTML='-'+n;
					}
					console.log("说明数组长度1且为符号再进数字之后    array值"+array[0]);
				}else{
					console.log("说明数组长度1且为数字");
					array[0]=array[0]*10+n;
					document.getElementById("screen").innerHTML=array[0];
					console.log("两次输入数字之后删除array中值"+"   array长度: "+array.length+" array值: "+array);
				}
				//转换为int
				
			}else{
				//数组中有两个值
				let p=array[0];
				let q=array[1];
				//数组中前一个值是数字 后一个是符号 
				if(q=='+'){
					console.log("array[0]=数字 array[1]=运算符  再次进来的是数字 值: "+n);
					let number=p+n;
					document.getElementById("screen").innerHTML=number;
					array=new Array();
					array[0]=number;
					console.log("此时数组长度  "+array.length+"  数组值为  "+array[0]);
				}
				else if(q=='-'){
					console.log("array[0]=数字 array[1]=运算符  再次进来的是数字 值: "+n);
					let number=p-n;
					document.getElementById("screen").innerHTML=number;
					array=new Array();
					array[0]=number;
					console.log("此时数组长度  "+array.length+"  数组值为  "+array[0]);
				}
				else if(q=='*'){
					console.log("array[0]=数字 array[1]=运算符  再次进来的是数字 值: "+n);
					let number=p*n;
					document.getElementById("screen").innerHTML=number;
					array=new Array();
					array[0]=number;
					console.log("此时数组长度  "+array.length+"  数组值为  "+array[0]);
				}
				else if(q=='/'){
					console.log("array[0]=数字 array[1]=运算符  再次进来的是数字 值: "+n);
					let number=p/n;
					document.getElementById("screen").innerHTML=number;
					array=new Array();
					array[0]=number;
					console.log("此时数组长度  "+array.length+"  数组值为  "+array[0]);
				}else if(q=='.'){
					console.log("array[0]=数字 array[1]=运算符  再次进来的是数字 值: "+n);
					let number=p+n*0.1;
					document.getElementById("screen").innerHTML=number;
					array=new Array();
					array[0]=number;
					console.log("此时数组长度  "+array.length+"  数组值为  "+array[0]);
				}
				
			}
			
		}
		function calculator1(m){
	        //array.length=0
			if(array.length==0){
				console.log("array.length=0  按键输入运算符为:  "+m);
				// for (let i=0;i<sign.length;i++){
					if(m=='*'||m=='/'||m=='='||m=='C'){
						document.getElementById("screen").innerHTML=0;
						// break;
					}else{
						//把符号放进数组
						array[0]=m;
						console.log("array.length:  "+array.length+"  array值:  "+array[0]);
						// break;
					}
				// }
				//array.length=1  且再调用符号函数
			}else if(array.length==1){
				console.log("array.length=1,按键输入运算符为:  "+m);
				//array.length=1  array[0]是运算符
				let varia=array[0];
				varia=Number(varia)
				if(isNaN(varia)){
					console.log("array[0]=运算符");
					if(m=='C'){
						array=new Array();
						document.getElementById("screen").innerHTML=0;
						console.log("清零  "+array.length);
					}else{
						array=new Array();
						document.getElementById("screen").innerHTML="输入错误 连续输入运算符";
						console.log("输入错误 连续输入运算符  "+array.length);
						// console.log("清零  "+array.length);
					}	
				
				}else{
					//array.length=1   array[0]=数字
					console.log("array[0]=数字");
					if(m=='+'||m=='-'||m=='*'||m=='/'){
						array[1]=m;
						console.
						log("array.length  "+array.length+"  array[1]值为  "+array[1]);
					}else if(m=='='){
						//说明数组长度1且为数字 再进来的符号是=
						
						document.getElementById("screen").innerHTML=array[0];
					}else if(m=='.'){
						let s=(array[0].toString()).indexOf('.');
						if(s==1){
							document.getElementById("screen").innerHTML=array[0];
						}else{
							array[1]=m;
							console.log("array.length  "+array.length+"  array[1]值为  "+array[1]);
						    document.getElementById("screen").innerHTML=array[0]+m;
						}
					}
					else{
						array=new Array();
						document.getElementById("screen").innerHTML=0;
						
					}
				}
				}
			}
	</script>
</html>

CSS

#all{
	background-color: rgb(202,255,112,0.9);
	width: 300px;
	padding:20px 40px;
	border-radius: 25px;
	display: flex;
	flex-direction: column;
	position: relative;
}
#up{
	width: 100%;
	display: flex;
	width: 30%;
}
#screen{
	position: absolute;
	width: 165px;
	height: 50px;
	left:120px;
	top:20px;
	margin: 9px 8px;
	border: 1px solid black; 
	background-color: rgb(162,205,90,0.9);
	border-radius: 10px;
	box-shadow: 5px 5px 5px #888888;
	font-size: 10px;
	text-align: right;
	line-height: 70px;
}
#down{
	display: flex;
	flex-wrap: wrap;
	
}
#equal{
	background-color: rgb(105,139,34, 0.7);
	border-radius: 100px;
	font-size: 25px;
	padding: 10px 15px;
	margin: 10px 0px;
}
#divide{
	background-color: rgb(105,139,34, 0.7);
	border-radius: 100px;
	font-size: 25px;
	padding: 10px 15px;
	margin: 10px 20px;
}
.btn{
	background-color: rgb(105,139,34, 0.7);
	border-radius: 100px;
	font-size: 25px;
	padding: 10px 15px;
	margin: 10px 10px;
	box-shadow: 5px 5px 5px #888888;
	
}

效果图

 总结 :花费时间一天半  中间存在bug  (小数处理问题  还有大于10的数问题) bug没有处理  只是刷js题  刷思路  完全自己的思路  敲之前没有任何借鉴  所以算法可能很差    重在记录

菜鸟教程上关于计算器的代码(效果和我差的不是一点半点哈哈哈   加油)

<div class="center">
		<h1>HTML CSS, JavaScript 计算器</h1>
		<a href="https://github.com/guuibayer/simple-calculator" target="_blank"><i class="fa fa-github"></i></a>
		<form name="calculator">
			<input type="button" id="clear" class="btn other" value="C">
			<input type="text" id="display">
				<br>
			<input type="button" class="btn number" value="7" onclick="get(this.value);">
			<input type="button" class="btn number" value="8" onclick="get(this.value);">
			<input type="button" class="btn number" value="9" onclick="get(this.value);">
			<input type="button" class="btn operator" value="+" onclick="get(this.value);">
				<br>
			<input type="button" class="btn number" value="4" onclick="get(this.value);">
			<input type="button" class="btn number" value="5" onclick="get(this.value);">
			<input type="button" class="btn number" value="6" onclick="get(this.value);">
			<input type="button" class="btn operator" value="*" onclick="get(this.value);">
				<br>
			<input type="button" class="btn number" value="1" onclick="get(this.value);">
			<input type="button" class="btn number" value="2" onclick="get(this.value);">
			<input type="button" class="btn number" value="3" onclick="get(this.value);">
			<input type="button" class="btn operator" value="-" onclick="get(this.value);">
				<br>
			<input type="button" class="btn number" value="0" onclick="get(this.value);">
			<input type="button" class="btn operator" value="." onclick="get(this.value);">
			<input type="button" class="btn operator" value="/" onclick="get(this.value);">			
			<input type="button" class="btn other" value="=" onclick="calculates();">
		</form>
	</div>
/* Basic Reset */
* {
	border: none;
	font-family: 'Open Sans', sans-serif;
	margin: 0;
	padding: 0;
}
body {

}
.center {
	background-color: #fff;
	border-radius: 50%;
	height: 600px;
	margin: auto;
	width: 600px;
}
h1 {
	color: #495678;
	font-size: 30px;	
	margin-top: 20px;
	padding-top: 50px;
	display: block;
	text-align: center;
	text-decoration: none;
}
a {
	color: #495678;
	font-size: 30px;	
	display: block;
	text-align: center;
	text-decoration: none;
	padding-top: 20px;
}
form {
	background-color: #495678;
	box-shadow: 4px 4px #3d4a65;
	margin: 40px auto;
	padding: 40px 0 30px 40px;	
	width: 280px;
}
.btn {
	outline: none;
	cursor: pointer;
	font-size: 20px;
	height: 45px;
	margin: 5px 0 5px 10px;
	width: 45px;
}
.btn:first-child {
	margin: 5px 0 5px 10px;
}
.btn, #display, form {
	border-radius: 25px;
}
#display {
	outline: none;
	background-color: #98d1dc;
	box-shadow: inset 6px 6px 0px #3facc0;
	color: #dededc;
	font-size: 20px;
	height: 47px;
	text-align: right;
	width: 165px;
	padding-right: 10px;
	margin-left: 10px;
}
.number {
	background-color: #72778b;
	box-shadow: 0 5px #5f6680;
	color: #dededc;
}
.number:active {
	box-shadow: 0 2px #5f6680;
  	-webkit-transform: translateY(2px);
  	-ms-transform: translateY(2px);
  	-moz-tranform: translateY(2px);
  	transform: translateY(2px);
}
.operator {
	background-color: #dededc;
	box-shadow: 0 5px #bebebe;
	color: #72778b;
}
.operator:active {
	box-shadow: 0 2px #bebebe;
  	-webkit-transform: translateY(2px);
  	-ms-transform: translateY(2px);
  	-moz-tranform: translateY(2px);
  	transform: translateY(2px);
}
.other {
	background-color: #e3844c;
	box-shadow: 0 5px #e76a3d;
	color: #dededc;
}
.other:active {
	box-shadow: 0 2px #e76a3d;
  	-webkit-transform: translateY(2px);
  	-ms-transform: translateY(2px);
  	-moz-tranform: translateY(2px);
  	transform: translateY(2px);
}
/* limpa o display */ 
document.getElementById("clear").addEventListener("click", function() {
	document.getElementById("display").value = "";
});
/* recebe os valores */
function get(value) {
	document.getElementById("display").value += value; 
} 

/* calcula */
function calculates() {
	var result = 0;
	result = document.getElementById("display").value;
	document.getElementById("display").value = "";
	document.getElementById("display").value = eval(result);
};

效果展示:

 

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值