js版實(shí)現(xiàn)計(jì)算器功能
本文實(shí)例為大家分享了js實(shí)現(xiàn)計(jì)算器功能的具體代碼,供大家參考,具體內(nèi)容如下
在老師的帶領(lǐng)下完成了這個(gè)簡(jiǎn)單的計(jì)算器,這是一個(gè)神奇的過程,計(jì)算器的基本功能都是有的。雖然是個(gè)簡(jiǎn)單的計(jì)算器,但對(duì)初學(xué)者來說,還是需要強(qiáng)大的邏輯判斷能力,里面有很多的條件,作為開發(fā)者要不斷的尋找設(shè)計(jì)里的bug,不斷地完善用戶的需求,而這些都需要清晰的邏輯推理和判斷,我有點(diǎn)頭大了。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>計(jì)算器</title>
<style>
*{
padding:0;
margin:0;
}
table{
width:400px;
margin:auto;
border:1px solid silver;
border-collapse: collapse;/*列與列的間距*/
}
td {
width: 100px;
border: 1px solid #525252;
}
td input{
width:98.7%;
height:60px;
outline: none;
text-align: right;
font-size: 20px;
background: rgba(251, 255, 227, 0.81);
}
td button{
width:100%;
height:60px;
font-size: 22px;
background: rgba(223, 255, 243, 0.81);
}
</style>
</head>
<body>
<table>
<tr>
<td colspan="4" ><input id="text" type="text" value="0" /></td>
</tr>
<tr>
<td colspan="2"><button class="btn">del</button></td>
<td colspan="2"><button class="btn">c</button></td>
</tr>
<tr>
<td><button class="btn">9</button></td>
<td><button class="btn">8</button></td>
<td><button class="btn">7</button></td>
<td><button class="btn">+</button></td>
</tr>
<tr>
<td><button class="btn">6</button></td>
<td><button class="btn">5</button></td>
<td><button class="btn">4</button></td>
<td><button class="btn">-</button></td>
</tr>
<tr>
<td><button class="btn">3</button></td>
<td><button class="btn">2</button></td>
<td><button class="btn">1</button></td>
<td><button class="btn">*</button></td>
</tr>
<tr>
<td><button class="btn">0</button></td>
<td><button class="btn">.</button></td>
<td><button class="btn">=</button></td>
<td><button class="btn">/</button></td>
</tr>
</table>
<!--<span id="m">8</span>-->
<script>
/* var M=document.getElementById ("m");
console.log(M.innerHTML );
console.log(M.innerText);*/
//獲取按鈕
var buttonal=document.getElementsByClassName ("btn");
var textal=document.getElementById("text");
var res=[]; //定義一個(gè)數(shù)組存儲(chǔ)輸入的值
var label=false;
for(var i=0;i<buttonal.length;i++){
buttonal [i].onclick=addclick;
function addclick(){
//輸入為數(shù)字或者為“.”
if(!isNaN(this.innerHTML) || this.innerHTML=="."){
//文本框初值不為0
label = true;
if(textal.value!== "0"){
//文本框中含有“.”
if(textal.value.indexOf(".")!==-1){
//處理點(diǎn)重復(fù)的問題 文本框里面有點(diǎn) 不上去點(diǎn)(用戶按的數(shù)字 得加 用戶按的是點(diǎn) 不加)
//輸入"."時(shí)
if(this.innerHTML!== "."){
textal.value+=this.innerHTML;
}
}
else{
textal.value+=this.innerHTML;
}
}
//文本框初值為0
else{
if(this.innerHTML =="."){
textal.value="0"+this.innerHTML ;
}
else{
textal.value=this.innerHTML;
}
}
}
//非數(shù)字
else{
switch(this.innerHTML ) {
case "+" :save(this);
break;
case "-" :save(this);
break;
case "/" :save(this);
break;
case "*":save(this);
break;
case "=":
res.push(textal.value);
var result=eval(res.join(""));
if(result =="Infinity"){
remove_add ("remove");
}
textal.value=result==Infinity?"除數(shù)不能為零":result;
//console.log(res.join(""));
res=[];
break;
case "del":
//從后往前一個(gè)一個(gè)的減數(shù)字 substr(start,count) substring(start,end) end不取
textal.value = textal.value.length==1 ? "0":textal.value.substr(0,textal.value.length-1);
break;
case "c":
textal.value="0";
res=[];
remove_add("add");
break;
}
}
}
}
function save(mini){
//清屏之前存儲(chǔ)用戶按的值
// 確認(rèn)一個(gè)條件 用戶是連續(xù)按符號(hào) 還是數(shù)字+符號(hào)
if(!label){ //連續(xù)兩次按符號(hào)時(shí)
res[res.length-1]=mini.innerHTML ; //第二次按的符號(hào)替代第一次的
}
else{
res.push(textal.value );
res.push(mini.innerHTML );
}
textal.value="0";
label=false;
}
//卸載除c以外的所有元素的事件
function remove_add(p){
for(var i=0;i<buttonal.length;i++){
if(p == "add"){
buttonal[i].onclick = addclick;
}
else{
if(buttonal[i].innerHTML!="c"){
buttonal[i].onclick = null;
}
}
}
}
</script>
</body>
</html>
效果圖:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 基于HTML+JS實(shí)現(xiàn)簡(jiǎn)單的年齡計(jì)算器
- 原生JavaScript實(shí)現(xiàn)網(wǎng)頁版計(jì)算器
- javascript實(shí)現(xiàn)計(jì)算器功能詳解流程
- JavaScript實(shí)現(xiàn)簡(jiǎn)單計(jì)算器小功能
- 原生js實(shí)現(xiàn)簡(jiǎn)易計(jì)算器
- 用javascript實(shí)現(xiàn)簡(jiǎn)單計(jì)算器
- javascript實(shí)現(xiàn)編寫網(wǎng)頁版計(jì)算器
- JavaScript實(shí)例--實(shí)現(xiàn)計(jì)算器
相關(guān)文章
BootStrapTable 單選及取值的實(shí)現(xiàn)方法
學(xué)習(xí)bootstrapTable 一直沒有找到 單選框的選定的和取值的教程,接下來通過本文給大家分享BootStrapTable 單選及取值的實(shí)現(xiàn)方法,非常不錯(cuò),需要的朋友參考下2017-01-01
JavaScript實(shí)現(xiàn)定時(shí)任務(wù)隊(duì)列的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)一個(gè)基于一定時(shí)間間隔連續(xù)執(zhí)行任務(wù)隊(duì)列的功能,文中的示例代碼講解詳細(xì),需要的小伙伴可以參考下2023-11-11
js實(shí)現(xiàn)網(wǎng)頁倒計(jì)時(shí)、網(wǎng)站已運(yùn)行時(shí)間功能的代碼3例
這篇文章主要介紹了js實(shí)現(xiàn)網(wǎng)頁倒計(jì)時(shí)、網(wǎng)站已運(yùn)行時(shí)間功能的代碼3例,需要的朋友可以參考下2014-04-04
javascript 異步頁面查詢實(shí)現(xiàn)代碼(asp.net)
異步頁面查詢,其實(shí)與自動(dòng)完成時(shí)一樣的原理,根據(jù)用戶輸入的關(guān)鍵詞自動(dòng)的與數(shù)據(jù)庫中的匹配,并顯示出來,提高用戶體驗(yàn),但主要搜索量大的話,增加服務(wù)器開銷。2010-05-05
一文詳解JavaScript中的replace()函數(shù)
replace方法的語法是stringObj.replace(rgExp, replaceText),其中stringObj是字符串(string),下面這篇文章主要給大家介紹了關(guān)于JavaScript中replace()函數(shù)的相關(guān)資料,需要的朋友可以參考下2023-01-01
JS為什么說async/await是generator的語法糖詳解
這篇文章主要給大家介紹了關(guān)于JS為什么說async/await是generator的語法糖的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JS具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07

