这是css部分,当时写的有点仓促代码没有格式化,当然这不是本文的重点(哈哈)
<style>
*{margin: 0px;padding:0px;box-sizing: border-box;}
ul li{list-style:none;}
div.box{width: 300px;height:400px;padding:10px;border:1px solid #123456;}
div.screen{width:280px;height:50px;border:1px solid gray;text-align: center;
line-height: 50px;}
div.key{width:280px;height:300px;margin:12px 0px;border:1px solid gray;}
div.key div.function{display:flex;justify-content: space-around;align-items: center;}
div.math ul,div.num{display:flex;justify-content: space-around;align-items: center;}
div.math{flex:2 1 auto;}
div.clear,div.get{width:80px;height:40px;}
div.clear,div.get,div.math ul li{border:1px solid gray;}
div.math ul li{width:30px;height:30px;}
div.math ul li:nth-child(odd){margin:10px;}
div.num{margin-top:15px;}
div.key,div.clear,div.get{margin-top:10px;}
div.clear,div.get{font-size: 24px;text-align: center;line-height: 40px;}
div.get{font-size:45px;line-height: 35px;}
div.num .math ul li{font-size:24px;text-align: center;line-height: 30px;}
div.screen p{font-size: 18px;}
div.clear,.get,.math ul li{cursor:pointer;}
</style>
这是结构部分
<body>
<div class="box">
<div class="screen">
<p id="content">内容</p>
</div>
<div class="key">
<div class="function">
<div class="clear">清除</div>
<div class="get">=</div>
</div>
<div class="num">
<div class="math">
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>+</li>
</ul>
<ul>
<li>4</li>
<li>5</li>
<li>6</li>
<li>-</li>
</ul>
<ul>
<li>7</li>
<li>8</li>
<li>9</li>
<li>*</li>
</ul>
<ul>
<li>*</li>
<li>0</li>
<li>#</li>
<li>/</li>
</ul>
</div>
</div>
</div>
</div>
</body>
下面是这篇文章的重点,js部分用到了Array的reduce、slice和join方法;当然这只是自己随便练习的有些的不好的地方请大家多多指正。
<script>
let liNode = document.querySelectorAll("div.math ul li");
let conNode = document.getElementById("content");
let getNode = document.querySelector("div.get");
let clearNode = document.querySelector("div.clear")
let contentNode = document.querySelector("#content");
let [...liArray] = liNode;
[...liArray].map(function(value,index,array){
value.addEventListener("click",()=>{
//调用函数
set(value.innerHTML);
});
});
//将结果渲染到页面
getNode.addEventListener("click",()=>{
contentNode.innerHTML = get();
});
//回到初始状态
clearNode.addEventListener("click",()=>{
obj.arr=[];
contentNode.innerHTML = "";
});
//存放数据
let obj = {
arr:[]
};
//得到结果
let result=0;
function get(){
obj.arr.reduce((per,value,index,arr)=>{
if(typeof value !="number"){
let newarr = arr.slice(0,index).join("")*1;
let lastNode = arr.slice(index+1).join("")*1;
switch (value) {
case "+":
result = newarr + lastNode;
console.log(result);
break;
case "-":
result = newarr - lastNode;
console.log(result);
break;
case "*":
result = newarr * lastNode;
console.log(result);
break;
case "/":
result = newarr / lastNode;
console.log(result);
break;
};
};
});
return result;
};
// get();
//传入值
function set(val){
obj.arr.push(val);
};
</script>
本来想用js对象的属性访问器来做的,奈何自己还不太明白。如果有会的希望可以教教我,在这先感谢各位了,对了我对模块还是不太理解,真心希望有人能教教我。