Простой калькулятор для сайта

Простой калькулятор на HTML + CSS + JavaScript

Всем привет в данной записи мы с вами рассмотрим реализацию простого калькулятора на CSS, HTML, JavaScript. Это простой и очень красивый калькулятор, который вы легко сможете добавить на свой сайт.

Этот калькулятор писал не я, поэтому ловите ссылку на источник – http://thecodeplayer.com/walkthrough/javascript-css3-calculator

Вот наш калькулятор.

C
7 8 9 + 4 5 6 1 2 3 ÷ 0 . = x

Не смотря на то что это не мой калькулятор, я проявлю наглость и выложу код. Так как этот код находиться в общем доступе, я думаю что не кто сильно не обидится!

HTML

<div id="calculator">
	<!-- Screen and clear key -->
	<div class="top">
		<span class="clear">C</span>
		<div class="screen"></div>
	</div>
	
	<div class="keys">
		<!-- operators and other keys -->
		<span>7</span>
		<span>8</span>
		<span>9</span>
		<span class="operator">+</span>
		<span>4</span>
		<span>5</span>
		<span>6</span>
		<span class="operator">-</span>
		<span>1</span>
		<span>2</span>
		<span>3</span>
		<span class="operator">÷</span>
		<span>0</span>
		<span>.</span>
		<span class="eval">=</span>
		<span class="operator">x</span>
	</div>
</div>

<!-- PrefixFree -->
<script src="http://thecodeplayer.com/uploads/js/prefixfree-1.0.7.js" type="text/javascript" type="text/javascript"></script>

CSS

/* Basic reset */
* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;
	
	/* Better text styling */
	font: bold 14px Arial, sans-serif;
}

/* Finally adding some IE9 fallbacks for gradients to finish things up */

/* A nice BG gradient */
html {
	height: 100%;
	background: white;
	background: radial-gradient(circle, #fff 20%, #ccc);
	background-size: cover;
}

/* Using box shadows to create 3D effects */
#calculator {
	width: 325px;
	height: auto;
	
	margin: 100px auto;
	padding: 20px 20px 9px;
	
	background: #9dd2ea;
	background: linear-gradient(#9dd2ea, #8bceec);
	border-radius: 3px;
	box-shadow: 0px 4px #009de4, 0px 10px 15px rgba(0, 0, 0, 0.2);
}

/* Top portion */
.top span.clear {
	float: left;
}

/* Inset shadow on the screen to create indent */
.top .screen {
	height: 40px;
	width: 212px;
	
	float: right;
	
	padding: 0 10px;
	
	background: rgba(0, 0, 0, 0.2);
	border-radius: 3px;
	box-shadow: inset 0px 4px rgba(0, 0, 0, 0.2);
	
	/* Typography */
	font-size: 17px;
	line-height: 40px;
	color: white;
	text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
	text-align: right;
	letter-spacing: 1px;
}

/* Clear floats */
.keys, .top {overflow: hidden;}

/* Applying same to the keys */
.keys span, .top span.clear {
	float: left;
	position: relative;
	top: 0;
	
	cursor: pointer;
	
	width: 66px;
	height: 36px;
	
	background: white;
	border-radius: 3px;
	box-shadow: 0px 4px rgba(0, 0, 0, 0.2);
	
	margin: 0 7px 11px 0;
	
	color: #888;
	line-height: 36px;
	text-align: center;
	
	/* prevent selection of text inside keys */
	user-select: none;
	
	/* Smoothing out hover and active states using css3 transitions */
	transition: all 0.2s ease;
}

/* Remove right margins from operator keys */
/* style different type of keys (operators/evaluate/clear) differently */
.keys span.operator {
	background: #FFF0F5;
	margin-right: 0;
}

.keys span.eval {
	background: #f1ff92;
	box-shadow: 0px 4px #9da853;
	color: #888e5f;
}

.top span.clear {
	background: #ff9fa8;
	box-shadow: 0px 4px #ff7c87;
	color: white;
}

/* Some hover effects */
.keys span:hover {
	background: #9c89f6;
	box-shadow: 0px 4px #6b54d3;
	color: white;
}

.keys span.eval:hover {
	background: #abb850;
	box-shadow: 0px 4px #717a33;
	color: #ffffff;
}

.top span.clear:hover {
	background: #f68991;
	box-shadow: 0px 4px #d3545d;
	color: white;
}

/* Simulating "pressed" effect on active state of the keys by removing the box-shadow and moving the keys down a bit */
.keys span:active {
	box-shadow: 0px 0px #6b54d3;
	top: 4px;
}

.keys span.eval:active {
	box-shadow: 0px 0px #717a33;
	top: 4px;
}

.top span.clear:active {
	top: 4px;
	box-shadow: 0px 0px #d3545d;
}

JavaScript

// Get all the keys from document
var keys = document.querySelectorAll('#calculator span');
var operators = ['+', '-', 'x', '÷'];
var decimalAdded = false;

// Add onclick event to all the keys and perform operations
for(var i = 0; i < keys.length; i++) {
	keys[i].onclick = function(e) {
		// Get the input and button values
		var input = document.querySelector('.screen');
		var inputVal = input.innerHTML;
		var btnVal = this.innerHTML;
		
		// Now, just append the key values (btnValue) to the input string and finally use javascript's eval function to get the result
		// If clear key is pressed, erase everything
		if(btnVal == 'C') {
			input.innerHTML = '';
			decimalAdded = false;
		}
		
		// If eval key is pressed, calculate and display the result
		else if(btnVal == '=') {
			var equation = inputVal;
			var lastChar = equation[equation.length - 1];
			
			// Replace all instances of x and ÷ with * and / respectively. This can be done easily using regex and the 'g' tag which will replace all instances of the matched character/substring
			equation = equation.replace(/x/g, '*').replace(/÷/g, '/');
			
			// Final thing left to do is checking the last character of the equation. If it's an operator or a decimal, remove it
			if(operators.indexOf(lastChar) > -1 || lastChar == '.')
				equation = equation.replace(/.$/, '');
			
			if(equation)
				input.innerHTML = eval(equation);
				
			decimalAdded = false;
		}
		
		// Basic functionality of the calculator is complete. But there are some problems like 
		// 1. No two operators should be added consecutively.
		// 2. The equation shouldn't start from an operator except minus
		// 3. not more than 1 decimal should be there in a number
		
		// We'll fix these issues using some simple checks
		
		// indexOf works only in IE9+
		else if(operators.indexOf(btnVal) > -1) {
			// Operator is clicked
			// Get the last character from the equation
			var lastChar = inputVal[inputVal.length - 1];
			
			// Only add operator if input is not empty and there is no operator at the last
			if(inputVal != '' && operators.indexOf(lastChar) == -1) 
				input.innerHTML += btnVal;
			
			// Allow minus if the string is empty
			else if(inputVal == '' && btnVal == '-') 
				input.innerHTML += btnVal;
			
			// Replace the last operator (if exists) with the newly pressed operator
			if(operators.indexOf(lastChar) > -1 && inputVal.length > 1) {
				// Here, '.' matches any character while $ denotes the end of string, so anything (will be an operator in this case) at the end of string will get replaced by new operator
				input.innerHTML = inputVal.replace(/.$/, btnVal);
			}
			
			decimalAdded =false;
		}
		
		// Now only the decimal problem is left. We can solve it easily using a flag 'decimalAdded' which we'll set once the decimal is added and prevent more decimals to be added once it's set. It will be reset when an operator, eval or clear key is pressed.
		else if(btnVal == '.') {
			if(!decimalAdded) {
				input.innerHTML += btnVal;
				decimalAdded = true;
			}
		}
		
		// if any other key is pressed, just append it
		else {
			input.innerHTML += btnVal;
		}
		
		// prevent page jumps
		e.preventDefault();
	} 
}
На этом всё!
Если у вас есть вопросы, пишите их в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime

37
Оставить комментарий

avatar
37 Цепочка комментария
0 Ответы по цепочке
0 Последователи
 
Популярнейший комментарий
Цепочка актуального комментария
35 Авторы комментариев
AndrewBogAndrewBogtreantincMurrayVumMurrayVum Авторы недавних комментариев
  Подписаться  
новее старее большинство голосов
Уведомление о
JanleF
Гость

Viagra Se Vende Con Receta [url=http://apcialisle.com/#]cialis[/url] Order Generic Propecia Male Pattern Hair Loss Cialis Want To Buy Isotretinoin Us Free Shipping

JanleF
Гость

Levitra 10 Mg Orosolubile Prezzo Farmacia [url=https://apcialisle.com/#]cialis without prescription[/url] Buy Propecia Online Without Prescription tadalafil cialis from india Societe Priligy

JanleF
Гость

Cialis Levitra Comment Viagra [url=https://abuycialisb.com/#]Cialis[/url] 365 Pills Viagra cialis price 5 Mg Cialis Prices

Bupbaipt
Гость
Bupbaipt

cialis pills canada canadian pharmacy cheap viagra cialis

Bupbaipt
Гость
Bupbaipt

cialis discount offers cheap cialis viagra sale point pakistan

Bupbaipt
Гость
Bupbaipt

buying levitra online http://cialisxtl.com can you really buy viagra online

Arturojep
Гость
Arturojep

can buy viagra las vegas https://viagrawithoutdoctorspres.com levitra online sale

JimmyGoori
Гость
JimmyGoori

viagra without a doctor prescription usa https://edpillsphrm.com can buy cialis over counter

RaymondLem
Гость
RaymondLem

order viagra pfizer online viagra for women over 50 cheap levitra online no prescription

Harryraw
Гость
Harryraw

cialis on line http://kaletra24.com – buy kaletra viagra for sale atlanta

Harryraw
Гость
Harryraw

how to buy cialis online from canada http://hydroxychloroquine24.com – buy hydroxychloroquine online cialis 20 mg 4 tablet fiyat

Harryraw
Гость
Harryraw

order viagra canada pharmacy http://tadal24ph.com – cialis cost best over the counter viagra

Harryraw
Гость
Harryraw

buy generic levitra uk http://tadal24ph.com – cialis viagra sale dubai

BradleyAnync
Гость
BradleyAnync

cialis buy from india
cheap viagra

BradleyAnync
Гость
BradleyAnync

buy viagra hcmc
online viagra

BradleyAnync
Гость
BradleyAnync

where can i buy cialis soft tabs
viagra

BradleyAnync
Гость
BradleyAnync

cialis for sale in canada
viagra pills

BradleyAnync
Гость
BradleyAnync

cheapest cialis internet
viagra online

BradleyAnync
Гость
BradleyAnync

viagra online ordering
viagra

Immof
Гость
Immof

http://reyna.userbet.xyz ПРИСОЕДИНЯЙТЕСЬ СЕЙЧАС И ПОЛУЧИТЕ 100$ К ВАШЕМУ ПЕРВОМУ ДЕПОЗИТУ!
Управляйте роботом самостоятельно! Контроль уровня риска!

[url=https://saratov.podarki-market.ru/catalog/product-283424/?MID=1724&result=reply#message1724]Высокотехнологичные инструменты для заработка на криптовалютных активах[/url] [url=https://spb.podarki-market.ru/catalog/product-418356/?MID=1772&result=reply#message1772]Высокотехнологичные инструменты для заработка на криптовалютных активах[/url] [url=https://www.ufk34.ru/stati/158-iskovoe-zajavlenie-o-razdele-zhilogo-doma-v-nature]Высокотехнологичные инструменты для заработка на криптовалютных активах[/url] dcb4b5c

BradleyAnync
Гость
BradleyAnync

viagra buy switzerland
viagra

BradleyAnync
Гость
BradleyAnync

black cialis discount you
viagra pills

MathewDaups
Гость
MathewDaups

does medicaid cover cialis
http://cialisxtl.com/ free cialis

MathewDaups
Гость
MathewDaups

30 mg cialis what happens
http://cialisxtl.com/ current cost of cialis 5mg cvs

AndrewCig
Гость
AndrewCig

over counter viagra walgreens https://sildenafilprof.com
how to buy cialis in japan

AndrewCig
Гость
AndrewCig

generic viagra available in usa https://sildenafilprof.com
order viagra online safe

Robertorell
Гость
Robertorell

how to get cialis samples warnings for cialis

Robertorell
Гость
Robertorell

cialis without doctor prescription cialis pills

RichardHap
Гость
RichardHap

trial samples of viagra: viagra dosage recommendations order viagra men

RichardHap
Гость
RichardHap

cialis vs viagra: viagra prices order viagra from mexico

MurrayVum
Гость
MurrayVum

discount prescription drugs pet antibiotics without vet prescription
onlinepharmacyero.com prescription drugs canada buy online

MurrayVum
Гость
MurrayVum

prescription drugs prescription drugs without doctor approval
onlinepharmacyero.com meds online without doctor prescription

MurrayVum
Гость
MurrayVum

pain medications without a prescription buy prescription drugs from canada
onlinepharmacyero.com comfortis for dogs without vet prescription

MurrayVum
Гость
MurrayVum

tadalafil without a doctor’s prescription viagra without doctor prescription amazon
onlinepharmacyero.com google viagra dosage recommendations

treantinc
Гость
treantinc

Levitra Online 10 Mg [url=https://bbuycialisss.com/]Cialis[/url] Ontario No Script Pharmacy Buy Cialis Cialis Free 30 Day Trial

AndrewBog
Гость
AndrewBog

expired cialis 3 years buy cialis

AndrewBog
Гость
AndrewBog

cialis pills for sale cialis vs viagra