国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - 使用原生javascript開發計算器實例代碼

使用原生javascript開發計算器實例代碼

2022-01-21 16:52蔣偉平 js教程

這篇文章主要給大家介紹了關于如何使用原生javascript開發計算器的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

計算器的主要作用是進行數字運算,開發一個計算器功能的web實例,有助于更好的掌握js基礎的數字運算能力。

本實例詳細分析一個js計算器的開發步驟,學習本教程時最好先具備一些基礎的js知識。

計算器包括顯示數字區域和按鍵區域兩大部分,先把計算器的這兩個區域的html元素編寫出來,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<div class="calculator_wrap" id="calculator"><!--計算器外包元素-->
 <div class="show_num"><!--顯示數字區域-->
 <div class="num_save" id="numSave"></div><!--計算公式-->
 <div class="num_cur" id="numCur">0</div><!--計算結果-->
 <div class="show_m" id="showM">M</div><!--記憶存儲標志-->
 </div>
 <div class="btn_wrap" id="btnWrap"><!--按鈕區域-->
 <div class="btn" data-key="MC">MC</div><!--記憶清零-->
 <div class="btn" data-key="MR">MR</div><!--記憶讀取-->
 <div class="btn" data-key="MS">MS</div><!--存儲記憶-->
 <div class="btn" data-key="MA">M+</div><!--記憶加-->
 <div class="btn" data-key="ML">M-</div><!--記憶減-->
 <div class="btn" data-key="BACK">←</div><!--退格-->
 <div class="btn" data-key="CE">CE</div><!--清除當前-->
 <div class="btn" data-key="Clear">C</div><!--清除-->
 <div class="btn" data-key="Negate">±</div><!--正負轉換-->
 <div class="btn" data-key="Square">√ ̄</div><!--平方根-->
 <div class="btn" data-key="Num" data-value="7">7</div><!--7-->
 <div class="btn" data-key="Num" data-value="8">8</div><!--8-->
 <div class="btn" data-key="Num" data-value="9">9</div><!--9-->
 <div class="btn" data-key="Base" data-value="/">/</div><!--除-->
 <div class="btn" data-key="Percentage">%</div><!--百分號-->
 <div class="btn" data-key="Num" data-value="4">4</div><!--4-->
 <div class="btn" data-key="Num" data-value="5">5</div><!--5-->
 <div class="btn" data-key="Num" data-value="6">6</div><!--6-->
 <div class="btn" data-key="Base" data-value="*">*</div><!--乘-->
 <div class="btn" data-key="Reciprocal">1/x</div> <!--倒數-->
 <div class="btn" data-key="Num" data-value="1">1</div><!--1-->
 <div class="btn" data-key="Num" data-value="2">2</div><!--2-->
 <div class="btn" data-key="Num" data-value="3">3</div><!--3-->
 <div class="btn" data-key="Base" data-value="-">-</div><!--減-->
 <div class="btn equal" data-key="Equal">=</div><!--等于-->
 <div class="btn zero" data-key="Num" data-value="0">0</div><!--0-->
 <div class="btn" data-key="Point">.</div><!--小數點-->
 <div class="btn" data-key="Base" data-value="+">+</div><!--加-->
 </div>
</div>

讀者可以自己編寫一些樣式,設計一個自己喜歡的計算器效果。本實例的計算器效果如下圖所示:

使用原生javascript開發計算器實例代碼

樣式代碼:

?
1
2
3
4
5
6
7
8
9
10
11
.calculator_wrap{width:240px;height:360px;padding:10px;margin:30px auto;border:1px solid #8acceb;background:#d1f1ff;}
 .calculator_wrap .show_num{position:relative;padding:0 8px;height:60px;background:#fff;text-align:right;}
 .calculator_wrap .show_m{position: absolute;left:10px;bottom:3px;display:none;}
 .calculator_wrap .num_save{height:26px;line-height:26px;font-size:12px;white-space:nowrap;}
 .calculator_wrap .num_cur{font-size:28px;height:34px;line-height:34px;}
 .calculator_wrap .btn_wrap{font-size:0px;}
 .calculator_wrap .btn{display:inline-block;width:38px;height:38px;line-height:38px;text-align:center;border:1px solid #ccc;background:#666;color:#fff;font-size:14px;margin:10px 10px 0 0;cursor:pointer;}
 .calculator_wrap .btn:hover{background:#333;}
 .calculator_wrap .btn:nth-child(5n){margin-right:0px;}
 .calculator_wrap .equal{position:absolute;height:90px;line-height:90px;}
 .calculator_wrap .zero{width:90px;}

對于新手來說,計算器功能看起來好像很復雜,那么多按鈕、多種計算方式,不知如何開始。其實任何一個功能,只需要理清楚思路,一步一步編寫代碼,會發現實現起來都不難。

1 獲取各個html元素

web前端不論要在頁面上做什么,都要先獲取頁面上的各個DOM元素。看起來整個計算器的按鈕較多,實際開發中可以使用事件代理來操作按鈕,所以只獲取所有按鈕的容器元素即可。代碼如下:

?
1
2
3
4
5
6
7
8
9
10
//獲取外包元素
var eCalculator = document.getElementById('calculator');
//保存運算數據(公式)容器
var eNumSave = document.getElementById('numSave');
//當前數字容器
var eNumCur = document.getElementById('numCur');
//按鈕外部容器,用于事件代理
var eBtnWrap = document.getElementById('btnWrap');
//記憶存儲標志元素
var eShowM = document.getElementById('showM');

2 聲明相關變量

在運算過程中,需要一些變量來進行輔助計算、存儲結果和判斷等,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
//運算公式
var sStep = '';
//當前數字
var sCurValue = '0';
//運算結果
var nResult = null;
//運算符
var sMark = '';
//MR記憶存儲數據
var nMvalue = 0;
//輸入狀態。false:輸入數字替換原數字;true:輸入數字加到原數字后面;
var bLogStatus = false;

3 按鍵上添加點擊事件

因為整個計算器按鍵較多,每一個按鈕都單獨綁定一個事件會顯得太多,很繁瑣,還會影響性能,且容易出錯。所以剛才只獲取了按鍵的外部容器 eCalculator。

再使用事件代理,就只需要在容器上添加點擊事件,判斷當前點擊的按鍵是哪一個,再執行對應的計算即可。用鼠標點擊按鍵的時候,可能會因為點得太快而選擇了按鍵上的文字,因此還需要在外包容器上添加一個阻止默認行為的操作,代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
//外包容器添加鼠標按下事件,用于防止選中文字
eCalculator.addEventListener('mousedown',function(event){
 //阻止鼠標按下時的默認行為,防止點擊按鈕過快時選中文字
 event.preventDefault();
});
 
//按鍵容器添加點擊事件,用于代理所有按鍵的操作
eBtnWrap.addEventListener('click',function(event){
 
});

3.1 獲取點擊的按鍵和值

通過事件函數傳入的event參數,可以獲取到鼠標點擊的元素。再通過元素上的data-key和data-value屬性判斷鼠標點擊的是哪一個按鍵以及它的值,如下所示:

?
1
2
3
4
5
6
7
8
eBtnWrap.addEventListener('click',function(event){
 //獲取點擊的元素
 var eTarget = event.target;
 //判斷按下的鍵
 var key = eTarget.dataset.key;
 //獲取按下的值
 var value = eTarget.dataset.value;
});

3.2 判斷按鍵及值,數字鍵和小數點執行輸入操作

如果按鍵屬性data-key是'Num'表示按下的是數字,'Point'表示小數點。

這些按鍵都是執行輸入,因為數字有多個,所以把數字輸入封裝到fnInputNum函數中。再封裝fnShowResult函數把數據顯示到顯示數字區域。如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
eBtnWrap.addEventListener('click',function(event){
 /* … */
 
 //判斷點擊的是否是按鍵
 if(key){
 //用switch語句判斷不同的按鍵執行對應的操作
 switch(key){
  //數字鍵執行操作
  case 'Num':
  fnInputNum(value);
  break;
  //小數點操作
  case 'Point':
  //判斷是否有已小數點,用于限制只能輸入一個小數點
  if(sCurValue.indexOf('.')==-1){
   sCurValue = sCurValue + '.';
   bLogStatus = true;
  }
  break;
 }
 //顯示數據到顯示數字區域
 fnShowResult();
 }
});
//輸入數字
function fnInputNum(num){
 //根據輸入狀態判斷是替換當前數字還是添加到當前數字后面
 if(bLogStatus){
 sCurValue = sCurValue + num;
 }else{
 //限制第一個數字不能是0
 if(num!=0){
  bLogStatus = true;
 }
 sCurValue = num;
 }
}
//顯示計算結果
function fnShowResult(){
 //顯示計算公式
 eNumSave.innerHTML = sStep;
 //限制數字總長度
 if(sCurValue.length>14){
 sCurValue = sCurValue.slice(0,14);
 }
 //顯示當前數字
 eNumCur.innerHTML = sCurValue;
}

這時候已經可以點擊數字和小數點,輸入到計算器顯示屏上,如圖所示:

使用原生javascript開發計算器實例代碼

3.3 加減乘除運算

計算器最基本的就是加減乘除運算。為了實現對數字進行加減乘除并計算結果功能,封裝fnCountResult、fnBaseCount和fnEqual三個函數。

fnCountResult用于根據運算符計算結果;

fnBaseCount修改計算公式或計算結果;

fnEqual用于按下=號時計算結果,并重置數據。如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
eBtnWrap.addEventListener('click',function(event){
 /* … */
 
 //判斷點擊的是否是按鍵
 if(key){
 //用switch語句判斷不同的按鍵執行對應的操作
 switch(key){
  /* … */
  //加減乘除基本運算
  case 'Base':
  fnBaseCount(value);
  break;
  //等于
  case 'Equal':
  fnEqual();
  break;
 }
 //顯示數據到顯示數字區域
 fnShowResult();
 }
});
//計算結果
function fnCountResult(){
 //判斷當前運算符并執行運算
 switch(sMark){
 case '+':
  nResult = nResult===null?+sCurValue:nResult + (+sCurValue);
  break;
 case '-':
  nResult = nResult===null?+sCurValue:nResult - sCurValue;
  break;
 case '*':
  nResult = nResult===null?+sCurValue:nResult * sCurValue;
  break;
 case '/':
  nResult = nResult===null?+sCurValue:nResult / sCurValue;
  break;
 default:
  nResult = +sCurValue;
 }
}
//加減乘除基礎運算
function fnBaseCount(key){
 //如果是輸入狀態,進行運算
 if(bLogStatus){
 //修改輸入狀態
 bLogStatus = false;
 //計算公式
 sStep = sStep + ' ' + sCurValue + ' ' + key;
 //計算結果
 fnCountResult();
 sCurValue = ''+nResult;
 }else{
 //如果公式為空,先加上原始數字
 if(sStep==''){
  sStep = sCurValue + ' ' + key;
 }else{ //如果已有公式,更改最后的運算符
  sStep = sStep.slice(0,sStep.length-1) + ' ' + key;
 }
 }
 //更改運算符,用于計算
 sMark = key;
}
//等于
function fnEqual(){
 //如果沒有運算符,阻止后續操作
 if(sMark=='')return;
 //計算結果
 fnCountResult();
 sCurValue = ''+nResult;
 //重置數據
 sStep = '';
 sMark = '';
 bLogStatus = false;
}

現在已經可以在計算器上做加減乘除的計算了,如圖所示:

使用原生javascript開發計算器實例代碼

3.4 再給其他按鍵添加操作,代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
eBtnWrap.addEventListener('click',function(event){
 /* … */
 
 //判斷點擊的是否是按鍵
 if(key){
 //用switch語句判斷不同的按鍵執行對應的操作
 switch(key){
  /* … */
 
  //清除
  case 'Clear':
  fnClear()
  break;
  //退格
  case 'BACK':
  fnBack();
  break;
  //CE
  case 'CE':
  //清空當前顯示數值
  sCurValue = '0';
  bLogStatus = false;
  break;
  //取反
  case 'Negate':
  //當前數值取反
  sCurValue = ''+(-sCurValue);
  break;
  //取平方根
  case 'Square':
  //當前數值取平方根
  nResult = Math.sqrt(+sCurValue);
  //其他數據初始化
  sCurValue = ''+nResult;
  sStep = '';
  sMark = '';
  bLogStatus = false;
  break;
  //倒數
  case 'Reciprocal':
  //當前數值取倒數
  //其他數據初始化
  nResult = 1/sCurValue;
  sCurValue = ''+nResult;
  sStep = '';
  sMark = '';
  bLogStatus = false;
  break;
  //M系列
  case 'MC':
  //記憶數值清零
  nMvalue = 0;
  fnShowM()
  break;
  case 'MR':
  //顯示記憶數值
  sCurValue = '' + nMvalue;
  fnShowM()
  break;
  case 'MS':
  //記憶數值改為當前數值
  nMvalue = +sCurValue;
  fnShowM()
  break;
  case 'MA':
  //當前數值加到記憶數值中
  nMvalue += +sCurValue;
  fnShowM()
  break;
  case 'ML':
  //從記憶數值中減去當前數值
  nMvalue -= +sCurValue;
  fnShowM()
  break;
 }
 //顯示數據到顯示數字區域
 fnShowResult();
 }
});
//清除
function fnClear(){
 //初始化所有數據
 sStep = '';
 sCurValue = '0';
 nResult = null;
 sMark = '';
 bLogStatus = false;
}
//退格
function fnBack(){
 //必須是輸入狀態才可以退格
 if(bLogStatus){
 //減去數值最后一位數
 sCurValue = sCurValue.slice(0,sCurValue.length-1);
 //如果最后數值為空或負號(-),改為0,重置輸入狀態為false,不可再退格
 if(sCurValue==''||sCurValue=='-'){
  sCurValue = '0';
  bLogStatus = false;
 }
 }
}
//判斷是否有M記憶存儲
function fnShowM(){
 bLogStatus = false;
 //判斷是否顯示記憶存儲標志
 eShowM.style.display = nMvalue==0?'none':'block';
}

4 綁定鍵盤事件

寫到這里,計算器已經可以正常使用了。不過只能用鼠標點擊按鍵操作效率不高,為了可以更快的使用計算器,還需要加上鍵盤事件,當按下對應按鍵時,執行操作,如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//鍵盤事件
document.addEventListener('keyup',function(event){
 //獲取當前鍵盤按鍵
 var key = event.key;
 //獲取按鍵code
 var code = event.keyCode;
 //限制正確的按鍵才修改顯示的數據
 var comply = false;
 //輸入數字
 if((code>=48&&code<=57)||(code>=96&&code<=105)){
 fnInputNum(key);
 comply = true;
 }
 //加減乘除
 if( key=='*'||key=='+'||key=='/'||key=='-'){
 fnBaseCount(key);
 comply = true;
 }
 //esc鍵
 if(code==27){
 fnClear();
 comply = true;
 }
 //回車鍵
 if(code==13){
 fnEqual();
 comply = true;
 }
 //退格鍵
 if(code==8){
 fnBack();
 comply = true;
 }
 if(comply){
 //顯示數據到計算器屏幕
 fnShowResult();
 }
});

一個簡單的計算器就完成了,如果以學習為目的話,建議不要直接復制代碼,最好直接手動輸入代碼及注釋,加深印象和提高學習效果。

總結

到此這篇關于使用原生javascript開發計算器的文章就介紹到這了,更多相關原生js開發計算器內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://www.cnblogs.com/jiangweiping/p/14418393.html

延伸 · 閱讀

精彩推薦
  • js教程JS中循環遍歷數組的四種方式總結

    JS中循環遍歷數組的四種方式總結

    這篇文章主要給大家總結介紹了關于JS中循環遍歷數組的四種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,...

    前端小混混5432022-01-06
  • js教程在JavaScript中查找字符串中最長單詞的三種方法(推薦)

    在JavaScript中查找字符串中最長單詞的三種方法(推薦)

    這篇文章主要介紹了在JavaScript中查找字符串中最長單詞的三種方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋...

    Hunter網絡安全7342022-01-04
  • js教程原生JavaScript實現進度條

    原生JavaScript實現進度條

    這篇文章主要為大家詳細介紹了原生JavaScript實現進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    weixin_441349725562022-01-21
  • js教程使用Typescript開發微信小程序的步驟詳解

    使用Typescript開發微信小程序的步驟詳解

    這篇文章主要介紹了使用Typescript開發微信小程序的步驟詳解,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考...

    陳希章6762021-12-30
  • js教程微信小程序實現點贊業務

    微信小程序實現點贊業務

    這篇文章主要為大家詳細介紹了微信小程序實現點贊業務,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    壞蛋先生7632022-01-20
  • js教程微信小程序之高德地圖多點路線規劃過程示例詳解

    微信小程序之高德地圖多點路線規劃過程示例詳解

    這篇文章主要介紹了微信小程序之高德地圖多點路線規劃過程示例詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的...

    heli步籬6722022-01-04
  • js教程JavaScript如何實現防止重復的網絡請求的示例

    JavaScript如何實現防止重復的網絡請求的示例

    這篇文章主要介紹了JavaScript如何實現防止重復的網絡請求的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需...

    Daes11112022-01-10
  • js教程前端如何實現動畫過渡效果

    前端如何實現動畫過渡效果

    這篇文章主要介紹了前端如何實現動畫過渡效果,幫助大家更好的理解和學習前端開發網頁,感興趣的朋友可以了解下...

    donglegend6242022-01-17
主站蜘蛛池模板: 国产乱码精品一区二区三区中文 | 国产一区久久 | 亚洲蜜桃精久久久久久久 | 久久777 | 在线看国产 | 亚洲精品成人 | 永久看片 | 黄色片免费看 | 久久在线视频 | 久久久国际精品 | 91亚洲精品乱码久久久久久蜜桃 | 久久天天躁狠狠躁夜夜免费观看 | 久久精品无码一区二区三区 | 精品少妇一区二区三区 | 最近2019中文字幕大全视频10 | 久久久精品国产 | 久久精品2019中文字幕 | 亚洲精品综合中文字幕 | 国产精品美女久久久久久久久久久 | 性欧美大战久久久久久久免费观看 | 欧美二区三区视频 | 日日操夜夜操免费视频 | 免费污片网站 | 久久久久久亚洲 | 成人av一区二区三区 | 免费一级片 | 国产精品高清在线 | 日韩精品一区二区三区丰满 | 精品美女一区 | 91精品国产91久久久久久 | 日韩免费在线视频 | 欧美一区二区黄色 | 欧美第一专区 | 国产精品国产三级国产aⅴ 成人在线免费看 | 日韩免费视频一区二区 | 99热国产在线观看 | 久久久久中文字幕 | 狠狠插狠狠操 | 综合五月网 | 日韩精品一区二 | 欧美激情一区二区三级高清视频 |