JavaScript calculator
How do I make an javascript calculator?
Vanilla JS. Sizing is iffy on smaller devices.. What is a javascript calculator? How do you make a javascript calculator? This script and codes were developed by Giana on 12 June 2022, Sunday.
JavaScript calculator - Script Codes HTML Codes
<!DOCTYPE html>
<html >
<head> <meta charset="UTF-8"> <title>JavaScript calculator</title> <meta name="viewport" content="width=device-width, initial-scale=1">
<link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400' rel='stylesheet' type='text/css'> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> <link rel="stylesheet" href="css/style.css">
</head>
<body> <h1>JavaScript Calculator</h1>
<p class="warning">Don't divide by zero</p>
<div id="calculator" class="calculator"> <button id="clear" class="clear">C</button> <div id="viewer" class="viewer">0</div> <button class="num" data-num="7">7</button> <button class="num" data-num="8">8</button> <button class="num" data-num="9">9</button> <button data-ops="plus" class="ops">+</button> <button class="num" data-num="4">4</button> <button class="num" data-num="5">5</button> <button class="num" data-num="6">6</button> <button data-ops="minus" class="ops">-</button> <button class="num" data-num="1">1</button> <button class="num" data-num="2">2</button> <button class="num" data-num="3">3</button> <button data-ops="times" class="ops">*</button> <button class="num" data-num="0">0</button> <button class="num" data-num=".">.</button> <button id="equals" class="equals" data-result="">=</button> <button data-ops="divided by" class="ops">/</button>
</div>
<button id="reset" class="reset">Reset Universe?</button> <script src="js/index.js"></script>
</body>
</html>
JavaScript calculator - Script Codes CSS Codes
html { background: #100a1c; background-image: -webkit-radial-gradient(50% 30% ellipse at center top, #201e40 0%, rgba(0, 0, 0, 0) 100%), -webkit-radial-gradient(60% 50% ellipse at center bottom, #261226 0%, #100a1c 100%); background-image: radial-gradient(50% 30% ellipse at center top, #201e40 0%, rgba(0, 0, 0, 0) 100%), radial-gradient(60% 50% ellipse at center bottom, #261226 0%, #100a1c 100%); background-attachment: fixed; color: #6cacc5;
}
body { color: #6cacc5; font: 300 18px/1.6 "Source Sans Pro",sans-serif; margin: 0; padding: 5em 0 2em; text-align: center;
}
h1 { font-weight: 300; margin: 0;
}
/* Gradient text only on Webkit */
.warning { background: -webkit-linear-gradient(45deg, #c97874 10%, #463042 90%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; color: #8c5059; font-weight: 400; margin: 0 auto 6em; max-width: 9em;
}
.calculator { font-size: 28px; margin: 0 auto; width: 10em;
}
.calculator::before, .calculator::after { content: " "; display: table;
}
.calculator::after { clear: both;
}
/* Calculator after dividing by zero */
.broken { -webkit-animation: broken 2s; animation: broken 2s; -webkit-transform: translate3d(0, -2000px, 0); transform: translate3d(0, -2000px, 0); opacity: 0;
}
.viewer { color: #c97874; float: left; line-height: 3em; text-align: right; text-overflow: ellipsis; overflow: hidden; width: 7.5em; height: 3em;
}
button { border: 0; background: rgba(42, 50, 113, 0.28); color: #6cacc5; cursor: pointer; float: left; font: inherit; margin: 0.25em; width: 2em; height: 2em; -webkit-transition: all 0.5s; transition: all 0.5s;
}
button:hover { background: #201e40;
}
button:focus { outline: 0; /* The value fade-ins that appear */
}
button:focus::after { -webkit-animation: zoom 1s; animation: zoom 1s; -webkit-animation-iteration-count: 1; animation-iteration-count: 1; -webkit-animation-fill-mode: both; animation-fill-mode: both; content: attr(data-num); cursor: default; font-size: 100px; position: absolute; top: 1.5em; left: 50%; text-align: center; margin-left: -24px; opacity: 0; width: 48px;
}
/* Same as above, modified for operators */
.ops:focus::after { content: attr(data-ops); margin-left: -210px; width: 420px;
}
/* Same as above, modified for result */
.equals:focus::after { content: attr(data-result); margin-left: -300px; width: 600px;
}
/* Reset button */
.reset { background: rgba(201, 120, 116, 0.28); color: #c97874; font-weight: 400; margin-left: -77px; padding: 0.5em 1em; position: absolute; top: -20em; left: 50%; width: auto; height: auto; /* When button is revealed */
}
.reset:hover { background: #c97874; color: #100a1c;
}
.reset.show { top: 20em; -webkit-animation: fadein 4s; animation: fadein 4s;
}
/* Animations */
/* Values that appear onclick */
@-webkit-keyframes zoom { 0% { -webkit-transform: scale(0.2); transform: scale(0.2); opacity: 1; } 70% { -webkit-transform: scale(1); transform: scale(1); } 100% { opacity: 0; }
}
@keyframes zoom { 0% { -webkit-transform: scale(0.2); transform: scale(0.2); opacity: 1; } 70% { -webkit-transform: scale(1); transform: scale(1); } 100% { opacity: 0; }
}
/* Division by zero animation */
@-webkit-keyframes broken { 0% { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1; } 5% { -webkit-transform: rotate(5deg); transform: rotate(5deg); } 15% { -webkit-transform: rotate(-5deg); transform: rotate(-5deg); } 20% { -webkit-transform: rotate(5deg); transform: rotate(5deg); } 25% { -webkit-transform: rotate(-5deg); transform: rotate(-5deg); } 50% { -webkit-transform: rotate(45deg); transform: rotate(45deg); } 70% { -webkit-transform: translate3d(0, 2000px, 0); transform: translate3d(0, 2000px, 0); opacity: 1; } 75% { opacity: 0; } 100% { -webkit-transform: translate3d(0, -2000px, 0); transform: translate3d(0, -2000px, 0); }
}
@keyframes broken { 0% { -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); opacity: 1; } 5% { -webkit-transform: rotate(5deg); transform: rotate(5deg); } 15% { -webkit-transform: rotate(-5deg); transform: rotate(-5deg); } 20% { -webkit-transform: rotate(5deg); transform: rotate(5deg); } 25% { -webkit-transform: rotate(-5deg); transform: rotate(-5deg); } 50% { -webkit-transform: rotate(45deg); transform: rotate(45deg); } 70% { -webkit-transform: translate3d(0, 2000px, 0); transform: translate3d(0, 2000px, 0); opacity: 1; } 75% { opacity: 0; } 100% { -webkit-transform: translate3d(0, -2000px, 0); transform: translate3d(0, -2000px, 0); }
}
/* Reset button fadein */
@-webkit-keyframes fadein { 0% { top: 20em; opacity: 0; } 50% { opacity: 0; } 100% { opacity: 1; }
}
@keyframes fadein { 0% { top: 20em; opacity: 0; } 50% { opacity: 0; } 100% { opacity: 1; }
}
@media (min-width: 420px) { .calculator { width: 12em; } .viewer { width: 8.5em; } button { margin: 0.5em; }
}
JavaScript calculator - Script Codes JS Codes
/*
TODO: Limit number input Disallow . from being entered multiple times Clean up structure
*/
(function() { "use strict"; // Shortcut to get elements var el = function(element) { if (element.charAt(0) === "#") { // If passed an ID... return document.querySelector(element); // ... returns single element } return document.querySelectorAll(element); // Otherwise, returns a nodelist }; // Variables var viewer = el("#viewer"), // Calculator screen where result is displayed equals = el("#equals"), // Equal button nums = el(".num"), // List of numbers ops = el(".ops"), // List of operators theNum = "", // Current number oldNum = "", // First number resultNum, // Result operator; // Batman // When: Number is clicked. Get the current number selected var setNum = function() { if (resultNum) { // If a result was displayed, reset number theNum = this.getAttribute("data-num"); resultNum = ""; } else { // Otherwise, add digit to previous number (this is a string!) theNum += this.getAttribute("data-num"); } viewer.innerHTML = theNum; // Display current number }; // When: Operator is clicked. Pass number to oldNum and save operator var moveNum = function() { oldNum = theNum; theNum = ""; operator = this.getAttribute("data-ops"); equals.setAttribute("data-result", ""); // Reset result in attr }; // When: Equals is clicked. Calculate result var displayNum = function() { // Convert string input to numbers oldNum = parseFloat(oldNum); theNum = parseFloat(theNum); // Perform operation switch (operator) { case "plus": resultNum = oldNum + theNum; break; case "minus": resultNum = oldNum - theNum; break; case "times": resultNum = oldNum * theNum; break; case "divided by": resultNum = oldNum / theNum; break; // If equal is pressed without an operator, keep number and continue default: resultNum = theNum; } // If NaN or Infinity returned if (!isFinite(resultNum)) { if (isNaN(resultNum)) { // If result is not a number; set off by, eg, double-clicking operators resultNum = "You broke it!"; } else { // If result is infinity, set off by dividing by zero resultNum = "Look at what you've done"; el('#calculator').classList.add("broken"); // Break calculator el('#reset').classList.add("show"); // And show reset button } } // Display result, finally! viewer.innerHTML = resultNum; equals.setAttribute("data-result", resultNum); // Now reset oldNum & keep result oldNum = 0; theNum = resultNum; }; // When: Clear button is pressed. Clear everything var clearAll = function() { oldNum = ""; theNum = ""; viewer.innerHTML = "0"; equals.setAttribute("data-result", resultNum); }; /* The click events */ // Add click event to numbers for (var i = 0, l = nums.length; i < l; i++) { nums[i].onclick = setNum; } // Add click event to operators for (var i = 0, l = ops.length; i < l; i++) { ops[i].onclick = moveNum; } // Add click event to equal sign equals.onclick = displayNum; // Add click event to clear button el("#clear").onclick = clearAll; // Add click event to reset button el("#reset").onclick = function() { window.location = window.location; };
}());
Developer | Giana |
Username | giana |
Uploaded | June 12, 2022 |
Rating | 4.5 |
Size | 5,853 Kb |
Views | 44,528 |
Find the perfect freelance services for your business! Fiverr's mission is to change how the world works together. Fiverr connects businesses with freelancers offering digital services in 500+ categories. Find Developer!
Name | Size |
Halloween CSS Bleeding Header | 3,721 Kb |
Random animated pattern | 6,609 Kb |
CSS Particles | 5,265 Kb |
Pure CSS Candy Cane Text | 2,695 Kb |
Stars | 2,970 Kb |
Random Color Palette Generator | 5,872 Kb |
Buttons with animated background | 3,550 Kb |
CSS Gradient Text in Firefox | 3,158 Kb |
CSS box shadow animation | 12,668 Kb |
HTML 5 Video Player | 10,489 Kb |
Jasper is the AI Content Generator that helps you and your team break through creative blocks to create amazing, original content 10X faster. Discover all the ways the Jasper AI Content Platform can help streamline your creative workflows. Start For Free!
Name | Username | Size |
Css3 loader | Clknap | 2,391 Kb |
Wip elementary os navbar | Nickcolley | 2,993 Kb |
CSS Grid Overlay | Cliffpyles | 3,090 Kb |
Sticky notes with CSS3 | HaiNguyen007 | 2,146 Kb |
CSS eye follow | Pedrocampos | 2,592 Kb |
Animated skewed panes | NyX | 4,462 Kb |
Vue.js Lazy Loading | Kjbrum | 3,620 Kb |
JQuery exercise | Brian-baum | 3,780 Kb |
Ionic - Wordpress REST API starter | Superpikar | 2,961 Kb |
Click handler test | Snapson | 2,329 Kb |
Surf anonymously, prevent hackers from acquiring your IP address, send anonymous email, and encrypt your Internet connection. High speed, ultra secure, and easy to use. Instant setup. Hide Your IP Now!