利用原生javascript制作简易计算器

港控/mmm° 2022-11-25 11:43 306阅读 0赞

第一步:利用html构建好计算器的大概形状样式

  1. <table>
  2. <tr>
  3. <td colspan="4" ><input id="text" type="text" value="0" /></td>
  4. </tr>
  5. <tr>
  6. <td colspan="2"><button class="btn">del</button></td>
  7. <td colspan="2"><button class="btn">c</button></td>
  8. </tr>
  9. <tr>
  10. <td><button class="btn">9</button></td>
  11. <td><button class="btn">8</button></td>
  12. <td><button class="btn">7</button></td>
  13. <td><button class="btn">+</button></td>
  14. </tr>
  15. <tr>
  16. <td><button class="btn">6</button></td>
  17. <td><button class="btn">5</button></td>
  18. <td><button class="btn">4</button></td>
  19. <td><button class="btn">-</button></td>
  20. </tr>
  21. <tr>
  22. <td><button class="btn">3</button></td>
  23. <td><button class="btn">2</button></td>
  24. <td><button class="btn">1</button></td>
  25. <td><button class="btn">*</button></td>
  26. </tr>
  27. <tr>
  28. <td><button class="btn">0</button></td>
  29. <td><button class="btn">.</button></td>
  30. <td><button class="btn">=</button></td>
  31. <td><button class="btn">/</button></td>
  32. </tr>
  33. </table>

第二步:利用css对其进行修饰加工

  1. <style>
  2. *{
  3. padding:0;
  4. margin:0;
  5. }
  6. table{
  7. width:400px;
  8. margin:auto;
  9. border:1px solid silver;
  10. border-collapse: collapse;/*列与列的间距*/
  11. }
  12. td {
  13. width: 100px;
  14. border: 1px solid #525252;
  15. }
  16. td input{
  17. width:98.7%;
  18. height:60px;
  19. outline: none;
  20. text-align: right;
  21. font-size: 20px;
  22. background: rgba(251, 255, 227, 0.81);
  23. }
  24. td button{
  25. width:100%;
  26. height:60px;
  27. font-size: 22px;
  28. background: rgba(251, 223, 255, 0.81);
  29. }
  30. </style>

第三步:利用js写出计算器的基本功能

  1. //获取按钮
  2. var buttonal=document.getElementsByClassName ("btn");
  3. var textal=document.getElementById("text");
  4. var res=[]; //定义一个数组存储输入的值
  5. var label=false;
  6. for(var i=0;i<buttonal.length;i++){
  7. buttonal [i].onclick=addclick;
  8. function addclick(){
  9. //输入为数字或者为“.”
  10. if(!isNaN(this.innerHTML) || this.innerHTML=="."){
  11. //文本框初值不为0
  12. label = true;
  13. if(textal.value!== "0"){
  14. //文本框中含有“.”
  15. if(textal.value.indexOf(".")!==-1){
  16. //处理点重复的问题 文本框里面有点 不上去点(用户按的数字 得加 用户按的是点 不加)
  17. //输入"."时
  18. if(this.innerHTML!== "."){
  19. textal.value+=this.innerHTML;
  20. }
  21. }
  22. else{
  23. textal.value+=this.innerHTML;
  24. }
  25. }
  26. //文本框初值为0
  27. else{
  28. if(this.innerHTML =="."){
  29. textal.value="0"+this.innerHTML ;
  30. }
  31. else{
  32. textal.value=this.innerHTML;
  33. }
  34. }
  35. }
  36. //非数字
  37. else{
  38. switch(this.innerHTML ) {
  39. case "+" :save(this);
  40. break;
  41. case "-" :save(this);
  42. break;
  43. case "/" :save(this);
  44. break;
  45. case "*":save(this);
  46. break;
  47. case "=":
  48. res.push(textal.value);
  49. var result=eval(res.join(""));
  50. if(result =="Infinity"){
  51. remove_add ("remove");
  52. }
  53. textal.value=result==Infinity?"除数不能为零":result;
  54. //console.log(res.join(""));
  55. res=[];
  56. break;
  57. case "del":
  58. //从后往前一个一个的减数字 substr(start,count) substring(start,end) end不取
  59. textal.value = textal.value.length==1 ? "0":textal.value.substr(0,textal.value.length-1);
  60. break;
  61. case "c":
  62. textal.value="0";
  63. res=[];
  64. remove_add("add");
  65. break;
  66. }
  67. }
  68. }
  69. }
  70. function save(mini){
  71. //清屏之前存储用户按的值
  72. // 确认一个条件 用户是连续按符号 还是数字+符号
  73. if(!label){ //连续两次按符号时
  74. res[res.length-1]=mini.innerHTML ; //第二次按的符号替代第一次的
  75. }
  76. else{
  77. res.push(textal.value );
  78. res.push(mini.innerHTML );
  79. }
  80. textal.value="0";
  81. label=false;
  82. }
  83. //卸载除c以外的所有元素的事件
  84. function remove_add(p){
  85. for(var i=0;i<buttonal.length;i++){
  86. if(p == "add"){
  87. buttonal[i].onclick = addclick;
  88. }
  89. else{
  90. if(buttonal[i].innerHTML!="c"){
  91. buttonal[i].onclick = null;
  92. }
  93. }
  94. }
  95. }
  96. </script>

最终样式如下:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,306人围观)

还没有评论,来说两句吧...

相关阅读