1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+
4+ < head >
5+ < meta charset ="UTF-8 " />
6+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 " />
7+ < meta http-equiv ="X-UA-Compatible " content ="ie=edge " />
8+ < link rel ="stylesheet " href ="style.css " />
9+ < title > Calculator</ title >
10+ </ head >
11+
12+ < body >
13+ < h1 > HTML Calculator</ h1 >
14+ < div class ="calc-parent ">
15+ < div class ="row ">
16+ < div class ="column " id ="calc-display-val "> 0</ div >
17+ </ div >
18+ < div class ="row ">
19+ < div class ="calc-btn column " id ="calc-clear "> AC</ div >
20+ < div class ="calc-btn column " id ="calc-backspace "> ⇤</ div >
21+ < div class ="calc-btn calc-btn-operator column " id ="calc-divide ">
22+ ÷
23+ </ div >
24+ </ div >
25+ < div class ="row ">
26+ < div class ="calc-btn calc-btn-num column " id ="calc-seven "> 7</ div >
27+ < div class ="calc-btn calc-btn-num column " id ="calc-eight "> 8</ div >
28+ < div class ="calc-btn calc-btn-num column " id ="calc-nine "> 9</ div >
29+ < div class ="calc-btn calc-btn-operator column " id ="calc-multiply ">
30+ x
31+ </ div >
32+ </ div >
33+ < div class ="row ">
34+ < div class ="calc-btn calc-btn-num column " id ="calc-four "> 4</ div >
35+ < div class ="calc-btn calc-btn-num column " id ="calc-five "> 5</ div >
36+ < div class ="calc-btn calc-btn-num column " id ="calc-six "> 6</ div >
37+ < div class ="calc-btn calc-btn-operator column " id ="calc-plus "> +</ div >
38+ </ div >
39+ < div class ="row ">
40+ < div class ="calc-btn calc-btn-num column " id ="calc-one "> 1</ div >
41+ < div class ="calc-btn calc-btn-num column " id ="calc-two "> 2</ div >
42+ < div class ="calc-btn calc-btn-num column " id ="calc-three "> 3</ div >
43+ < div class ="calc-btn calc-btn-operator column " id ="calc-minus "> -</ div >
44+ </ div >
45+ < div class ="row ">
46+ < div class ="calc-btn calc-btn-num column " id ="calc-zero "> 0</ div >
47+ < div class ="calc-btn column " id ="calc-decimal "> .</ div >
48+ < div class ="calc-btn calc-btn-operator column " id ="calc-equals "> =</ div >
49+ </ div >
50+ </ div >
51+
52+ < script >
53+
54+ let zeroBtn = document . getElementById ( "calc-zero" ) ;
55+ let oneBtn = document . getElementById ( "calc-one" ) ;
56+ let twoBtn = document . getElementById ( "calc-two" ) ;
57+ let threeBtn = document . getElementById ( "calc-three" ) ;
58+ let fourBtn = document . getElementById ( "calc-four" ) ;
59+ let fiveBtn = document . getElementById ( "calc-fivee" ) ;
60+ let sixBtn = document . getElementById ( "calc-six" ) ;
61+ let sevenBtn = document . getElementById ( "calc-seven" ) ;
62+ let eightBtn = document . getElementById ( "calc-eight" ) ;
63+ let nineBtn = document . getElementById ( "calc-nine" ) ;
64+
65+ let decimalBtn = document . getElementById ( "calc-decimal" ) ;
66+ let clearBtn = document . getElementById ( "calc-clear" ) ;
67+ let backspaceBtn = document . getElementById ( "calc-backspace" ) ;
68+ let displayValElement = document . getElementById ( "calc-display-val" ) ;
69+
70+ displayVal = '0' ;
71+ let pendingVal ;
72+ let evalStringVal = [ ] ;
73+
74+ let numBtns = document . getElementsByClassName ( "calc-btn-num" ) ;
75+ let operatorBtns = document . getElementsByClassName ( "calc-btn-operator" ) ;
76+
77+ let updateDisplayVal = ( clickObj ) => {
78+ var btnText = clickObj . target . innerText ;
79+
80+ if ( displayVal === '0' )
81+ displayVal = '' ;
82+
83+ displayVal += btnText ;
84+ displayValElement . innerText = displayVal ;
85+
86+ } ;
87+
88+ var performOperation = ( clickObj ) => {
89+ var operator = clickObj . target . innerText ;
90+
91+ switch ( operator ) {
92+ case "+" :
93+ pendingVal = displayVal ;
94+ displayVal = '0' ;
95+ displayValElement . innerText = displayVal ;
96+ evalStringVal . push ( pendingVal )
97+ evalStringVal . push ( '+' )
98+ break ;
99+
100+ case "-" :
101+ pendingVal = displayVal ;
102+ displayVal = '0' ;
103+ displayValElement . innerText = displayVal ;
104+ evalStringVal . push ( pendingVal ) ;
105+ evalStringVal . push ( '-' ) ;
106+ break ;
107+
108+ case "x" :
109+ pendingVal = displayVal ;
110+ displayVal = '0' ;
111+ displayValElement . innerText = displayVal ;
112+ evalStringVal . push ( pendingVal ) ;
113+ evalStringVal . push ( '*' ) ;
114+ break ;
115+
116+ case "÷" :
117+ pendingVal = displayVal ;
118+ displayVal = '0' ;
119+ displayValElement . innerText = displayVal ;
120+ evalStringVal . push ( pendingVal ) ;
121+ evalStringVal . push ( '/' ) ;
122+ break ;
123+ case "=" :
124+ evalStringVal . push ( displayVal ) ;
125+ var evaluation = eval ( evalStringVal . join ( ' ' ) ) ;
126+ displayVal = evaluation + '' ;
127+ displayValElement . innerText = displayVal ;
128+ evalStringVal = [ ] ;
129+
130+ break ;
131+
132+ default :
133+ break ;
134+ }
135+ }
136+
137+ for ( let i = 0 ; i < numBtns . length ; i ++ ) {
138+ numBtns [ i ] . addEventListener ( "click" , updateDisplayVal , false ) ;
139+ }
140+
141+ for ( let i = 0 ; i < operatorBtns . length ; i ++ ) {
142+ operatorBtns [ i ] . addEventListener ( "click" , performOperation , false ) ;
143+ }
144+
145+
146+ clearBtn . onclick = ( ) => {
147+ displayVal = '0' ;
148+ pendingVal = undefined ;
149+ evalStringVal = [ ] ;
150+ displayValElement . innerHTML = displayVal ;
151+ }
152+
153+ backspaceBtn . onclick = ( ) => {
154+ let lengthOfDisplayVal = displayVal . length ;
155+ displayVal = displayVal . slice ( 0 , lengthOfDisplayVal - 1 ) ;
156+
157+ if ( displayVal === '' )
158+ displayVal = '0' ;
159+
160+
161+ displayValElement . innerText = displayVal ;
162+ }
163+
164+ decimalBtn . onclick = ( ) => {
165+
166+ if ( ! displayVal . includes ( '.' ) )
167+ displayVal += '.' ;
168+
169+
170+ displayValElement . innerText = displayVal ;
171+ }
172+
173+
174+ </ script >
175+ </ body >
176+
177+ </ html >
0 commit comments