经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » JavaScript » 查看文章
JS编写的科学计算器
来源:cnblogs  作者:林恒  时间:2021/1/4 9:40:00  对本文有异议

最近半个月编写了一个JS+CSS+HTML的网页计算器,从最初的具有简陋界面的简单计算器改版到最终具有科学/标准计算器转换功能并且界面非常友好的计算器,收获良多!总的来说,代码简单,通俗易读,下面贴上代码,供前端新手学习!欢迎提出宝贵意见,不吝指正!

 

 

 HTML代码(代码中仅仅是计算器界面内容布局):

  1. <html>
  2. <head>
  3. <title>计算器</title>
  4. <link href="style.css" rel="stylesheet" type="text/css"/>
  5. <script src="script.js"></script>
  6. </head>
  7. <body>
  8. <div id="calculator">
  9. <a href="http://write.blog.csdn.net/postlist" id='record'>计Sweet Smile</a>
  10. <div class="rescult">
  11. <textarea type="text" id="result0" οnfοcus="this.blur();"></textarea>
  12. <textarea type="text" id="result" οnfοcus="this.blur();"></textarea>
  13. </div>
  14. <div>
  15. <section class="model-1"> <!--包含按钮的一个长形区域-->
  16. <div class="checkbox" οnclick="styleChange()">
  17. <!--包含按钮的一个较小长形区域-->
  18. <input type="checkbox"/>
  19. <label>科学标准</label> <!--按钮底部的灰色滑动区-->
  20. </div>
  21. </section>
  22. </div>
  23. <!--标准计算器布局-->
  24. <div id="rows" style="display:inline;">
  25. <div class="row1">
  26. <button id="bt1" οnclick="zero()">C</button>
  27. <button id="bt2" οnclick="back()">DEL</button>
  28. <button id="bt3" οnclick="divide()">÷</button>
  29. <button id="bt4" οnclick="times()">×</button>
  30. </div>
  31. <div class="row2">
  32. <button id="bt5" οnclick="num(7)">7</button>
  33. <button id="bt6" οnclick="num(8)">8</button>
  34. <button id="bt7" οnclick="num(9)">9</button>
  35. <button id="bt8" οnclick="plus()">+</button>
  36. </div>
  37. <div class="row3">
  38. <button id="bt9" οnclick="num(4)">4</button>
  39. <button id="bt10" οnclick="num(5)">5</button>
  40. <button id="bt11" οnclick="num(6)">6</button>
  41. <button id="bt12" οnclick="minus()">-</button>
  42. </div>
  43. <div id="below">
  44. <div id="left">
  45. <div class="row4">
  46. <button id="bt13" οnclick="num(1)">1</button>
  47. <button id="bt14" οnclick="num(2)">2</button>
  48. <button id="bt15" οnclick="num(3)">3</button>
  49. </div>
  50. <div class="row5">
  51. <button id="bt16" οnclick="num(0)">0</button>
  52. <button id="bt17" οnclick="dot()">.</button>
  53. </div>
  54. </div>
  55. <div id="right">
  56. <button id="bt18" οnclick="equal()">=</button>
  57. </div>
  58. </div>
  59. </div>
  60. <!--科学计算器布局-->
  61. <div id="sci" style="display:none;">
  62. <div class="sci1">
  63. <button id="bt21" οnclick="zero()">C</button>
  64. <button id="bt22" οnclick="back()">DEL</button>
  65. <button id="bt23" οnclick="pow1()">^</button>
  66. <button id="bt24" οnclick="num('π')">π</button>
  67. <button id="bt25" οnclick="pow2()"></button>
  68. </div>
  69. <div class="sci2">
  70. <button id="bt26" οnclick="sin()">sin</button>
  71. <button id="bt27" οnclick="num('(')">(</button>
  72. <button id="bt28" οnclick="num(')')">)</button>
  73. <button id="bt29" οnclick="divide1()">1/X</button>
  74. <button id="bt30" οnclick="divide()">÷</button>
  75. </div>
  76. <div class="sci3">
  77. <button id="bt31" οnclick="cos()">cos</button>
  78. <button id="bt32" οnclick="num(7)">7</button>
  79. <button id="bt33" οnclick="num(8)">8</button>
  80. <button id="bt34" οnclick="num(9)">9</button>
  81. <button id="bt35" οnclick="times()">×</button>
  82. </div>
  83. <div class="sci4">
  84. <button id="bt36" οnclick="tan()">tan</button>
  85. <button id="bt37" οnclick="num(4)">4</button>
  86. <button id="bt38" οnclick="num(5)">5</button>
  87. <button id="bt39" οnclick="num(6)">6</button>
  88. <button id="bt40" οnclick="minus()">-</button>
  89. </div>
  90. <div class="sci5">
  91. <button id="bt41" οnclick="ln()">ln</button>
  92. <button id="bt42" οnclick="num(1)">1</button>
  93. <button id="bt43" οnclick="num(2)">2</button>
  94. <button id="bt44" οnclick="num(3)">3</button>
  95. <button id="bt45" οnclick="plus()">+</button>
  96. </div>
  97. <div class="sci6">
  98. <button id="bt46" οnclick="log()">log</button>
  99. <button id="bt47" οnclick="num(0)">0</button>
  100. <button id="bt48" οnclick="dot()">.</button>
  101. <button id="bt49" οnclick="quyu()">%</button>
  102. <button id="bt50" οnclick="equal()">=</button>
  103. </div>
  104. </div>
  105. </div>
  106. </body>
  107. </html>

下面是JS代码(代码语句都是非常简单的基础语法):

  1. //改进: 定义一个变量记录“=”的输入与否而不必每输入数字时都要检索一遍文本框内容
  2. var status=0; //标记所输入的是数字还是运算符号
  3. var calcu=0; //标记所要执行的方法是哪一个
  4. /*数字、括号及PI的输入*/
  5. function num(x){
  6. var str0=document.getElementById('result0').value;
  7. var str=document.getElementById('result').value;
  8. if(str0.indexOf("=")>0){
  9. document.getElementById('result0').value='';
  10. document.getElementById('result').value='0';
  11. str=document.getElementById('result').value;
  12. }
  13. if(str=="0")
  14. str='';
  15. str+=String(x);
  16. document.getElementById('result').value=str;
  17. status=0;
  18. }
  19. //输入. (未做是否包含“.”的判断)
  20. function dot(){
  21. var str0=document.getElementById('result0').value;
  22. var str=document.getElementById('result').value;
  23. if(str0.indexOf("=")>0){
  24. document.getElementById('result0').value='';
  25. document.getElementById('result').value='0';
  26. str=document.getElementById('result').value;
  27. }
  28. str=str+'.';
  29. document.getElementById('result').value=str;
  30. }
  31. /*三角函数以及'1/'计算*/
  32. function sin(){
  33. calcu=1;
  34. cal();
  35. }
  36. function cos(){
  37. calcu=2;
  38. cal();
  39. }
  40. function tan(){
  41. calcu=3;
  42. cal();
  43. }
  44. function divide1(){
  45. calcu=4;
  46. cal();
  47. }
  48. function ln(){
  49. calcu=5;
  50. cal();
  51. }
  52. function log(){
  53. calcu=6;
  54. cal();
  55. }
  56. function cal(){
  57. var str0=document.getElementById('result0').value;
  58. var str=document.getElementById('result').value;
  59. if(str0.indexOf("=")>0){
  60. document.getElementById('result0').value='';
  61. document.getElementById('result').value='0';
  62. str=document.getElementById('result').value;
  63. }
  64. if(str=="0")
  65. str='';
  66. switch(calcu){
  67. case 1: str+=String("sin(");break;
  68. case 2: str+=String("cos(");break;
  69. case 3: str+=String("tan(");break;
  70. case 4: str+=String("1/");break;
  71. case 5: str+=String("ln(");break;
  72. case 6: str+=String("log(");break;
  73. }
  74. document.getElementById('result').value=str;
  75. status=1;
  76. }
  77. /* ^、√以及%的输入 */
  78. function pow1(){
  79. calcu=1;
  80. powS();
  81. }
  82. function pow2(){
  83. calcu=2;
  84. powS();
  85. }
  86. function quyu(){
  87. calcu=3;
  88. powS();
  89. }
  90. function powS(){
  91. if(status == 1)
  92. return;
  93. var strpow0=document.getElementById('result0').value;
  94. var strpow=document.getElementById('result').value;
  95. if(strpow0.indexOf("=")>0){
  96. document.getElementById('result0').value='';
  97. /*document.getElementById('result').value='0';*/
  98. strpow=document.getElementById('result').value;
  99. }
  100. switch(calcu){
  101. case 1: strpow+=String('^');
  102. break;
  103. case 2: if(strpow=='0')
  104. strpow="√";
  105. else{
  106. strpow+=String('√');
  107. }
  108. break;
  109. case 3: strpow+=String("%");
  110. break;
  111. }
  112. document.getElementById('result').value=strpow;
  113. status=1;
  114. }
  115. /* +-×÷ 运算 */
  116. function plus(){
  117. calcu=1;
  118. calculate();
  119. }
  120. function times(){
  121. calcu=2;
  122. calculate();
  123. }
  124. function divide(){
  125. calcu=3;
  126. calculate();
  127. }
  128. function calculate(){
  129. if(status==1)
  130. return;
  131. var str0=document.getElementById('result0').value;
  132. var str=document.getElementById('result').value;
  133. if(str0.indexOf("=")>0 ){
  134. document.getElementById('result0').value='';
  135. /*document.getElementById('result').value='0';*/
  136. str=document.getElementById('result').value;
  137. }
  138. if(str=='')
  139. str='0';
  140. switch(calcu){
  141. case 1: str+='+';break;
  142. case 2: str+='×';break;
  143. case 3: str+='÷';break;
  144. }
  145. document.getElementById('result').value=str;
  146. status=1;
  147. }
  148. function minus(){
  149. var str0=document.getElementById('result0').value;
  150. var str=document.getElementById('result').value;
  151. if(str0.indexOf("=")>0){
  152. document.getElementById('result0').value='';
  153. /*document.getElementById('result').value='-';*/
  154. str=document.getElementById('result').value+'-';
  155. }
  156. else
  157. str+='-';
  158. document.getElementById('result').value=str;
  159. }
  160. //显示屏字符串为空
  161. function zero(){
  162. document.getElementById('result0').value="";
  163. document.getElementById('result').value="0";
  164. }
  165. //显示屏字符串减去最后一个字符
  166. function back(){
  167. var str0=document.getElementById('result0').value;
  168. var str=document.getElementById('result').value;
  169. if(str0.indexOf("=")>0 || str=='')
  170. return;
  171. var str1=str.substr(0,(str.length)-1)
  172. document.getElementById('result').value=str1;
  173. }
  174. //获取当前显示屏字符,判断所包含运算符,并做相关运算。
  175. function equal(){
  176. var str0=document.getElementById('result').value;
  177. if(str0=="")
  178. return;
  179. var str=str0.replace(/×/g,'*'); //用正则表达式进行全部替换
  180. str=str.replace(/÷/g,'/');
  181. str=str.replace(/π/g,'Math.PI');
  182. if(str.indexOf("sin")>=0){
  183. str=str.replace(/sin/g,'Math.round(Math.sin');
  184. str+='*1000000)/1000000';
  185. document.getElementById('result0').value=str0.concat("=");
  186. document.getElementById('result').value=eval(str);
  187. }
  188. else if(str.indexOf("cos")>=0){
  189. str=str.replace(/cos/g,'Math.round(Math.cos');
  190. str+='*1000000)/1000000';
  191. document.getElementById('result0').value=str0.concat("=");
  192. document.getElementById('result').value=eval(str);
  193. }
  194. else if(str.indexOf("tan")>=0){
  195. str=str.replace(/tan/g,'Math.round(Math.tan');
  196. str+='*1000000)/1000000';
  197. document.getElementById('result0').value=str0.concat("=");
  198. document.getElementById('result').value=eval(str);
  199. }
  200. else if(str.indexOf("^")>=0){
  201. var pos=str0.indexOf('^');
  202. var pow1=str0.substring(0,pos);
  203. var pow2=str0.substring(pos+1,str0.length+1);
  204. result=Math.pow(pow1, pow2);
  205. document.getElementById('result0').value=str0.concat("=");
  206. document.getElementById('result').value=eval(result);
  207. }
  208. else if(str.indexOf("√")>=0){
  209. var pos=str0.indexOf('√');
  210. var pow1=str0.substring(0,pos);
  211. var pow2=str0.substring(pos+1,str0.length+1);
  212. if(pow1==''){
  213. result=Math.pow(pow2,0.5);
  214. document.getElementById('result0').value=str0.concat("=");
  215. document.getElementById('result').value=eval(result);
  216. }
  217. else{
  218. result=Math.pow(pow2, 1/pow1);
  219. document.getElementById('result0').value=str0.concat("=");
  220. document.getElementById('result').value=eval(result);
  221. }
  222. }
  223. else if(str.indexOf("ln")>=0){
  224. var str=str0.replace(/ln/g,'Math.round(Math.log');
  225. str+='*1000000)/1000000';
  226. document.getElementById('result0').value=str0.concat("=");
  227. document.getElementById('result').value=eval(str);
  228. }
  229. else if(str.indexOf("log")>=0){
  230. var str=str0.replace(/log/g,'Math.log');
  231. str+= '/Math.log(10)';
  232. document.getElementById('result0').value=str0.concat("=");
  233. document.getElementById('result').value=eval(str);
  234. }
  235. else{
  236. result=(eval(str));
  237. document.getElementById('result0').value=str0.concat("=");
  238. document.getElementById('result').value=result;
  239. }
  240. var a=document.getElementById('result').value;
  241. if(a=="Infinity")
  242. document.getElementById('result').value='∞';
  243. else if(a=="-Infinity")
  244. document.getElementById('result').value='-∞';
  245. }
  246. function styleChange(){
  247. if(document.getElementById('rows').style.display=='inline'){
  248. document.getElementById('rows').style.display='none';
  249. document.getElementById('sci').style.display='inline';
  250. }
  251. else if(document.getElementById('rows').style.display=='none'){
  252. document.getElementById('rows').style.display='inline';
  253. document.getElementById('sci').style.display='none';
  254. }
  255. }

下面是CSS代码(其中按钮效果部分参考了纯CSS滑动按钮特效代码):

  1. body {
  2. font-size:24px;
  3. font-family:Arial, Georgia, "Times New Roman", Times, serif;
  4. color:#555;
  5. text-align:center;
  6. background-color:#555;
  7. }
  8. body div{
  9. align:center;
  10. margin-top:5px;
  11. }
  12. #calculator{
  13. align:center;
  14. width:350px;
  15. height:550px;
  16. margin:10px auto;
  17. border:#fff 2px solid;
  18. overflow:hidden;
  19. background-color:#f2f2f2;
  20. }
  21. .rescult{
  22. align:center;
  23. padding:10px 5px 0px 5px;
  24. }
  25. #result,#result0{
  26. width:300px;
  27. height:40px;
  28. font-size:35px;
  29. text-align:right;
  30. direction:ltr;
  31. border:#C0C0C0;
  32. overflow:hidden;
  33. background-color:#C0C0C0;
  34. word-wrap : normal;
  35. }
  36. #result0{
  37. font-size:25px;
  38. }
  39. section {
  40. float: left;
  41. width:100px;
  42. padding: 0px 200px 10px 20px;
  43. height: 50px;
  44. }
  45. .checkbox {
  46. position: relative;
  47. display: inline-block;
  48. }
  49. .checkbox label {
  50. font-size:20px;
  51. text-align: center;
  52. padding-top: 5px;
  53. width: 90px;
  54. height: 30px;
  55. position: relative;
  56. display: inline-block;
  57. border-radius: 46px;
  58. -webkit-transition: 0.4s;
  59. transition: 0.4s;
  60. }
  61. .checkbox label:after {
  62. content: '';
  63. position: absolute;
  64. padding-top: 20px;
  65. width: 45px;
  66. height: 20px;
  67. border-radius: 40%;
  68. left: 0;
  69. top: -5px;
  70. z-index: 2;
  71. background: #f2f2f2;
  72. box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
  73. -webkit-transition: 0.4s;
  74. transition: 0.4s;
  75. }
  76. .checkbox input {
  77. position: absolute;
  78. left: 0;
  79. top: 0;
  80. width: 100%;
  81. height: 100%;
  82. z-index: 5;
  83. opacity: 0;
  84. cursor: pointer;
  85. }
  86. .checkbox input:hover + label:after {
  87. box-shadow: 0 2px 15px 0 rgba(0, 0, 0, 0.2), 0 3px 8px 0 rgba(0, 0, 0, 0.2);
  88. }
  89. .checkbox input:checked + label:after {
  90. left: 45px;  
  1. }
  2. .model-1 .checkbox input:checked + label {
  3. background:#ccc ;
  4. }
  5. .model-1 .checkbox input:checked + label:after {
  6. background:#f2f2f2;
  7. }
  8. #rows{
  9. align:center;
  10. padding:0 3px;
  11. }
  12. #below{
  13. margin-top:0px;
  14. margin-left:25px;
  15. margin-bottom: 30px;
  16. width:300px;
  17. }
  18. #left{
  19. margin-top:0px;
  20. float:left;
  21. }
  22. #right{
  23. margin-top:10px;
  24. float:right;
  25. }
  26. .row1,.row2,.row3,#below{
  27. align:center;
  28. }
  29. .row3{
  30. margin-bottom: 0px;
  31. }
  32. #bt1,#bt2,#bt3,#bt4,#bt5,#bt6,#bt7,#bt8,#bt9,#bt10,#bt11,#bt12,#bt13,#bt14,#bt15,#bt16,#bt17,#bt18{
  33. font-size:18px;
  34. width:70px;
  35. height:70px;
  36. background-color:#eaeaea;
  37. cursor:pointer;
  38. }
  39. #bt16{
  40. width:145px;
  41. }
  42. #bt18{
  43. height:140px;
  44. }
  45. #sci{
  46. display:none;
  47. }
  48. #sci button{
  49. font-size:18px;
  50. width:55px;
  51. height:55px;
  52. background-color:#eaeaea;
  53. cursor:pointer;
  54. }
  55. #record{
  56. float:right;
  57. font-size:15px;
  58. color:#555;
  59. }
  60. #record:hover{
  61. color:red;
  62. }

转载于:https://blog.csdn.net/sweet___smile/article/details/50417211

原文链接:http://www.cnblogs.com/smileZAZ/p/14217198.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号