思维导图:
代码(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);
};
效果展示: