2020-12-18

JS实现计算器,带三角函数,根号

极简主义网页计算器。

实现了按键特效,可响应键盘按键,实时显示计算结果。

可切换模式,拓展高级功能,包括根号、三角函数、括号等。

效果如下:

 

 

 

 

 

 代码如下:

html:

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8"> <title>Calculator</title> <link rel="stylesheet" href="css/main.css"> <link rel="stylesheet" href="css/reset.css"> <script src='js/main.js' type='text/javascript'></script></head><body onkeypress="keyboard();"> <div id="calculator">  <!--计算器主体框架-->  <div >   <!--计算器标头-->   <p >Calculator</p>  </div>  <div >   <!--显示界面-->   <input type="text" id="exp" disabled>   <!--表达式区域-->   <input type="text" id="ans" disabled>   <!--答案区域-->  </div>  <div >   <!--键盘-->   <ul>    <li onclick="model()">     M    </li>    <li onclick="append('C')">     C    </li>    <li onclick="append('B')">     B    </li>    <li onclick="append('/')">     /    </li>    <li onclick="append(1)">1    </li>    <li onclick="append(2)">2    </li>    <li onclick="append(3)">3    </li>    <li onclick="append('*')">     ×    </li>    <li onclick="append(4)">4    </li>    <li onclick="append(5)">5    </li>    <li onclick="append(6)">6    </li>    <li onclick="append('-')">     -    </li>    <li onclick="append(7)">7    </li>    <li onclick="append(8)">8    </li>    <li onclick="append(9)">9    </li>    <li onclick="append('+')">     +    </li>    <li onclick="append('.')">.    </li>    <li onclick="append(0)">     0    </li>    <li onclick="plus_min();">     ±    </li>    <li onclick="append('=')">     =    </li>   </ul>  </div> </div> <div id="expand">  <ul>   <li onclick="Sqrt();">    √   </li>   <li onclick="append('(')">    (   </li>   <li onclick="append(')')">    )   </li>   <li onclick="append('sin(')">    sin   </li>   <li onclick="append('cos(')">    cos   </li>  </ul> </div></body></html><!--Made by Vincent Zhang 2017/07/10-->

Css:

main.css

body { text-align: center; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none;}#calculator { position: relative; border: 2px solid black; width: 320px; height: 590px; top: 20px; margin: 0 auto;}.setting { position: relative; width: 100%; height: 40px; border: 0px solid black; margin: 0 auto;}.head { float: left; margin: 0; padding-left: 17px; line-height: 40px;}.display { position: relative; width: 100%; height: 200px; border: 0px solid black; margin: 0 auto;}.expression { float: left; margin: 0; padding: 0; position: relative; width: 93%; height: 70px; border: 0px solid black; margin: 0 auto; text-align: right; font-size: 30px; color: #000; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; border: 0; outline: none; background-color: #FFFFFF;}.answer { float: left; margin: 0; padding: 0; position: relative; width: 93%; height: 130px; border: 0px solid black; margin: 0 auto; text-align: right; font-size: 50px; color: #000; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; border: 0; outline: none; background-color: #FFFFFF;}.keyboard { padding: 0; position: relative; float: right; width: 320px; height: 343px; border: 0px solid black; margin: 0 auto;}ul { list-style: none; padding: 0; margin: 0;}ul li { float: left; display: block; width: 80px; height: 68px; line-height: 68px; padding: 0; margin: 0; text-decoration: none; color: #000; display: block; cursor: pointer;}ul li:hover { color: #000000; background-color: rgb(230, 230, 230);}#expand { position: absolute; border: 0px solid black; width: 80px; height: 340px; padding: 0; margin: 0; display: none;}

reset,css

/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css *//* Document ========================================================================== *//** * 1. Correct the line height in all browsers. * 2. Prevent adjustments of font size after orientation changes in * IE on Windows Phone and in iOS. */html { line-height: 1.15; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */}/* Sections ========================================================================== *//** * Remove the margin in all browsers (opinionated). */body { margin: 0;}/** * Add the correct display in IE 9-. */article,aside,footer,header,nav,section { display: block;}/** * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. */h1 { font-size: 2em; margin: 0.67em 0;}/* Grouping content ========================================================================== *//** * Add the correct display in IE 9-. * 1. Add the correct display in IE. */figcaption,figure,main { /* 1 */ display: block;}/** * Add the correct margin in IE 8. */figure { margin: 1em 40px;}/** * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. */hr { box-sizing: content-box; /* 1 */ height: 0; /* 1 */ overflow: visible; /* 2 */}/** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */pre { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */}/* Text-level semantics ========================================================================== *//** * 1. Remove the gray background on active links in IE 10. * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. */a { background-color: transparent; /* 1 */ -webkit-text-decoration-skip: objects; /* 2 */}/** * 1. Remove the bottom border in Chrome 57- and Firefox 39-. * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. */abbr[title] { border-bottom: none; /* 1 */ text-decoration: underline; /* 2 */ text-decoration: underline dotted; /* 2 */}/** * Prevent the duplicate application of `bolder` by the next rule in Safari 6. */b,strong { font-weight: inherit;}/** * Add the correct font weight in Chrome, Edge, and Safari. */b,strong { font-weight: bolder;}/** * 1. Correct the inheritance and scaling of font size in all browsers. * 2. Correct the odd `em` font sizing in all browsers. */code,kbd,samp { font-family: monospace, monospace; /* 1 */ font-size: 1em; /* 2 */}/** * Add the correct font style in Android 4.3-. */dfn { font-style: italic;}/** * Add the correct background and color in IE 9-. */mark { background-color: #ff0; color: #000;}/** * Add the correct font size in all browsers. */small { font-size: 80%;}/** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. */sub,sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline;}sub { bottom: -0.25em;}sup { top: -0.5em;}/* Embedded content ========================================================================== *//** * Add the correct display in IE 9-. */audio,video { display: inline-block;}/** * Add the correct display in iOS 4-7. */audio:not([controls]) { display: none; height: 0;}/** * Remove the border on images inside links in IE 10-. */img { border-style: none;}/** * Hide the overflow in IE. */svg:not(:root) { overflow: hidden;}/* Forms ========================================================================== *//** * 1. Change the font styles in all browsers (opinionated). * 2. Remove the margin in Firefox and Safari. */button,input,optgroup,select,textarea { font-family: sans-serif; /* 1 */ font-size: 100%; /* 1 */ line-height: 1.15; /* 1 */ margin: 0; /* 2 */}/** * Show the overflow in IE. * 1. Show the overflow in Edge. */button,input { /* 1 */ overflow: visible;}/** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 1. Remove the inheritance of text transform in Firefox. */button,select { /* 1 */ text-transform: none;}/** * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` * controls in Android 4. * 2. Correct the inability to style clickable types in iOS and Safari. */button,html [type="button"],/* 1 */[type="reset"],[type="submit"] { -webkit-appearance: button; /* 2 */}/** * Remove the inner border and padding in Firefox. */button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner { border-style: none; padding: 0;}/** * Restore the focus styles unset by the previous rule. */button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring { outline: 1px dotted ButtonText;}/** * Correct the padding in Firefox. */fieldset { padding: 0.35em 0.75em 0.625em;}/** * 1. Correct the text wrapping in Edge and IE. * 2. Correct the color inheritance from `fieldset` elements in IE. * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. */legend { box-sizing: border-box; /* 1 */ color: inherit; /* 2 */ display: table; /* 1 */ max-width: 100%; /* 1 */ padding: 0; /* 3 */ white-space: normal; /* 1 */}/** * 1. Add the correct display in IE 9-. * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. */progress { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */}/** * Remove the default vertical scrollbar in IE. */textarea { overflow: auto;}/** * 1. Add the correct box sizing in IE 10-. * 2. Remove the padding in IE 10-. */[type="checkbox"],[type="radio"] { box-sizing: border-box; /* 1 */ padding: 0; /* 2 */}/** * Correct the cursor style of increment and decrement buttons in Chrome. */[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button { height: auto;}/** * 1. Correct the odd appearance in Chrome and Safari. * 2. Correct the outline style in Safari. */[type="search"] { -webkit-appearance: textfield; /* 1 */ outline-offset: -2px; /* 2 */}/** * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. */[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration { -webkit-appearance: none;}/** * 1. Correct the inability to style clickable types in iOS and Safari. * 2. Change font properties to `inherit` in Safari. */::-webkit-file-upload-button { -webkit-appearance: button; /* 1 */ font: inherit; /* 2 */}/* Interactive ========================================================================== *//* * Add the correct display in IE 9-. * 1. Add the correct display in Edge, IE, and Firefox. */details,/* 1 */menu { display: block;}/* * Add the correct display in all browsers. */summary { display: list-item;}/* Scripting ========================================================================== *//** * Add the correct display in IE 9-. */canvas { display: inline-block;}/** * Add the correct display in IE. */template { display: none;}/* Hidden ========================================================================== *//** * Add the correct display in IE 10-. */[hidden] { display: none;}

JS:

var modelFlag = 0;function append(str) { if (str == 'C') {  exp.value = "";  ans.value = ""; } else if (str == 'B') {  cstr = String(exp.value);  cstr = cstr.substring(0, cstr.length - 1);  exp.value = cstr;  if (exp.value.length != 0)   caculate();  else   ans.value = ""; } else if (str == '=') {  caculate(); } else {  exp.value += str;  caculate(); }}function plus_min() { cstr = String(exp.value); if (cstr[0] == '-') {  cstr = cstr.substring(1, cstr.length);  exp.value = cstr;  caculate(); } else {  cstr = "-" + cstr;  exp.value = cstr;  caculate(); }}function caculate() { expStr = String(exp.value); while (expStr.search(/sin\((\S*)\)/) != -1) {  contant = expStr.match(/sin\(([^\)]*)\)/);  expStr = expStr.replace(contant[0], String(Math.sin(parseFloat(contant[1]) / 180 * Math.PI))); } while (expStr.search(/cos\((\S*)\)/) != -1) {  contant = expStr.match(/cos\(([^\)]*)\)/);  expStr = expStr.replace(contant[0], String(Math.cos(parseFloat(contant[1]) / 180 * Math.PI))); } if (expStr.length == 0) {  ans.value = "0"; } else {  ans.value = eval(expStr); }}function keyboard() { key = window.event.keyCode; if (key >= 45 && key <= 57) {  append(String.fromCharCode(key)); } else if (key >= 40 && key <= 43) {  append(String.fromCharCode(key)); } else if (key == 13) {  caculate(); } else if (key == 8) {  append('B'); }}function model() { if (modelFlag == 0) {  document.getElementById("calculator").style.width = "400px";  document.getElementById("expand").style.top = String(document.getElementById("calculator").offsetTop + 242) + "px";  document.getElementById("expand").style.left = String(document.getElementById("calculator").offsetLeft + 2) + "px";  document.getElementById("expand").style.display = "block";  modelFlag = 1; } else {  document.getElementById("expand").style.display = "none";  document.getElementById("calculator").style.width = "320px";  modelFlag = 0; }}function Sqrt() { if (ans.value > 0) {  ans.value = Math.sqrt(ans.value);  exp.value = ""; } else {  ans.value = "Erro";  exp.value = ""; }}

如果对你有所帮助,亲点个推荐和关注,谢谢。









原文转载:http://www.shaoqun.com/a/501383.html

跨境电商:https://www.ikjzd.com/

雨果网:https://www.ikjzd.com/w/1307

camel:https://www.ikjzd.com/w/331.html


极简主义网页计算器。实现了按键特效,可响应键盘按键,实时显示计算结果。可切换模式,拓展高级功能,包括根号、三角函数、括号等。效果如下:代码如下:html:<!DOCTYPEhtml><htmllang="zh-CN"><head><metacharset="utf-8"><title>Calcula
haofang:haofang
tineye:tineye
武当山在哪个省 :武当山在哪个省
秋季泡温泉有什么好处:秋季泡温泉有什么好处
上海长风公园门票:上海长风公园门票

No comments:

Post a Comment