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

Простой калькулятор на 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();
	} 
}
0 0 голос
Рейтинг статьи
На этом всё!
Если у вас есть вопросы, пишите их в нашей группе - https://vk.com/progtime
Вы так же можете разместить свой вопрос на нашем форуме, где другие программисты смогут вам помочь в решение вашей задачи - https://vk.com/prog_time
В ней мы делимся своим опытом с другими начинающими программистами, поэтому обязательно ответим на ваш вопрос.
Так же прокачивайте свои навыки на нашем канале - https://www.youtube.com/c/ProgTime
Подписаться
Уведомить о
guest
58 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
JanleF
8 месяцев назад

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
7 месяцев назад

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
7 месяцев назад

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

Bupbaipt
Bupbaipt
7 месяцев назад

cialis pills canada canadian pharmacy cheap viagra cialis

Bupbaipt
Bupbaipt
7 месяцев назад

cialis discount offers cheap cialis viagra sale point pakistan

Bupbaipt
Bupbaipt
7 месяцев назад

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

Arturojep
Arturojep
7 месяцев назад

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

JimmyGoori
JimmyGoori
7 месяцев назад

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

RaymondLem
RaymondLem
6 месяцев назад

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

Harryraw
Harryraw
6 месяцев назад

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

Harryraw
Harryraw
6 месяцев назад

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

Harryraw
Harryraw
6 месяцев назад

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

Harryraw
Harryraw
6 месяцев назад

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

BradleyAnync
BradleyAnync
6 месяцев назад

cialis buy from india
cheap viagra

BradleyAnync
BradleyAnync
6 месяцев назад

buy viagra hcmc
online viagra

BradleyAnync
BradleyAnync
6 месяцев назад

where can i buy cialis soft tabs
viagra

BradleyAnync
BradleyAnync
6 месяцев назад

cialis for sale in canada
viagra pills

BradleyAnync
BradleyAnync
6 месяцев назад

cheapest cialis internet
viagra online

BradleyAnync
BradleyAnync
6 месяцев назад

viagra online ordering
viagra

Immof
Immof
6 месяцев назад

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
6 месяцев назад

viagra buy switzerland
viagra

BradleyAnync
BradleyAnync
6 месяцев назад

black cialis discount you
viagra pills

MathewDaups
MathewDaups
6 месяцев назад

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

MathewDaups
MathewDaups
6 месяцев назад

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

AndrewCig
AndrewCig
6 месяцев назад

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

AndrewCig
AndrewCig
6 месяцев назад

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

Robertorell
Robertorell
5 месяцев назад

how to get cialis samples warnings for cialis

Robertorell
Robertorell
5 месяцев назад

cialis without doctor prescription cialis pills

RichardHap
RichardHap
5 месяцев назад

trial samples of viagra: viagra dosage recommendations order viagra men

RichardHap
RichardHap
5 месяцев назад

cialis vs viagra: viagra prices order viagra from mexico

MurrayVum
MurrayVum
5 месяцев назад

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

MurrayVum
MurrayVum
5 месяцев назад

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

MurrayVum
MurrayVum
5 месяцев назад

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

MurrayVum
MurrayVum
5 месяцев назад

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

treantinc
treantinc
4 месяцев назад

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

AndrewBog
AndrewBog
4 месяцев назад

expired cialis 3 years buy cialis

AndrewBog
AndrewBog
4 месяцев назад

cialis pills for sale cialis vs viagra

RobertoLem
RobertoLem
4 месяцев назад

viagra for sale generic viagra

RobertoLem
RobertoLem
4 месяцев назад

pfizer viagra coupons from pfizer generic viagra prices

Michaelnatty
Michaelnatty
4 месяцев назад

what does viagra do viagra generic

Michaelnatty
Michaelnatty
4 месяцев назад

viagra generic viagra pills

Michaelnatty
Michaelnatty
4 месяцев назад

viagra dosage viagra generic

Gabrieldak
Gabrieldak
4 месяцев назад

cialis online pharmacy: viagra vs cialis

Gabrieldak
Gabrieldak
4 месяцев назад

cialis tolerance: cialis lowest price

DanielEntex
DanielEntex
4 месяцев назад

cheap pills online buy ed pills online

LesterRuild
LesterRuild
4 месяцев назад

roman viagra discount viagra

RobertEpiva
RobertEpiva
3 месяцев назад

wellbutrin online prescription wellbutrin pill

RobertEpiva
RobertEpiva
3 месяцев назад

paxil erectile dysfunction paxil for social anxiety

RobertEpiva
RobertEpiva
3 месяцев назад

buy paxil online generic paxil

GregoryNup
GregoryNup
3 месяцев назад

cbd oil colorado: best cbd oil for pain