• html、css、js实现简易计算器


     学习HTML,CSS,JS一个月后,想着能自己是否能写出一个简单的东西,故编写了简易的计算器,之前也写过一个坦克大战,坦克大战的有些基本功能没有实现,

    故也没有记录下来,想来,对这行初来咋到的,还是需要留下些东西供自己日后回忆,于是写下这篇随笔;因第一次写博客,不知道怎么上传源代码,也不知道怎么在博客页面实现计算效果。

    下面是完成后计算器页面:

    该计算器只是实现了简易的计算功能,很多其他功能没有实现,如运算的优先级功能,在后面的学习中再慢慢改进吧!

    因计算器布局比较规整,故用table表格布局,也可以用div或列表来布局;单元格里加入button标签,整体上大的table里含三列两行,在单元格里再插入表格;

    下面代码是:大的table里的第一行,包括时间、计算结果、清零和退格。

    以下是HTML部分

    复制代码
     1 <!DOCTYPE html>
     2 <html>
     3     <head>
     4         <meta charset="UTF-8">
     5         <title>计算器</title>
     6         <link rel="stylesheet" type="text/css" href="计算器.css"/>
     7         <script src="计算器.js"  type="text/javascript" charset="utf-8"></script>
     8     </head>
     9     <body>
    10         <table border="0" cellspacing="0" cellpadding="" id='main'>
    11             <tr>
    12                 <th id='time'>
    13                 </th>
    14                 <th >
    15                     <input type="text" name="" id="result" value="0" />
    16                 </th>
    17                 <th>
    18                     <input type="button" name="" id="" value="清零"  onclick="clean()"/>
    19                     <input type="button" name="" id="" value="退格"  onclick='backspace()'/>
    20                 </th>
    21             </tr>
    复制代码

    下面代码是:大的table里的第二行的第一个单元格(左边的计算板块),单元格内加入table表格

    复制代码
     1 <tr>
     2                 <td>
     3                     <table id="table1">
     4                         <tr>
     5                             <td>
     6                                 <input type="button" name="" id="" value="sin"  onclick="calc1('sin')"/>
     7                             </td>
     8                             <td>
     9                                 <input type="button" name="" id="" value="cos"  onclick="calc1('cos')"/>
    10                             </td>
    11                             <td>
    12                                 <input type="button" name="" id="" value="tan"  onclick="calc1('tan')"/>
    13                             </td>
    14                         </tr>
    15                         <tr>
    16                             <td>
    17                                 <input type="button" name="" id="" value="asin"  onclick="calc1('asin')"/>
    18                             </td>
    19                             <td>
    20                                 <input type="button" name="" id="" value="acos"  onclick="calc1('acos')"/>
    21                             </td>
    22                             <td>
    23                                 <input type="button" name="" id="" value="atan"  onclick="calc1('atan')"/>
    24                             </td>
    25                         </tr>
    26                         <tr>
    27                             <td>
    28                                 <input type="button" name="" id="" value="PI"  onclick="calc1('PI')"/>
    29                             </td>
    30                             <td>
    31                                 <input type="button" name="" id="" value="1/X"  onclick="calc1('1/x')"/>
    32                             </td>
    33                             <td>
    34                                 <input type="button" name="" id="" value="exp"  onclick="calc1('exp')"/>
    35                             </td>
    36                         </tr>
    37                         <tr>
    38                             <td>
    39                                 <input type="button" name="" id="" value="Inx"  onclick="calc1('Inx')"/>
    40                             </td>
    41                             <td>
    42                                 <input type="button" name="" id="" value="lgx"  onclick="calc1('lgx')"/>
    43                             </td>
    44                             <td>
    45                                 <input type="button" name="" id="" value="n!"  onclick="calc1('n!')"/>
    46                             </td>
    47                         </tr>
    48                     </table>
    49                 </td>
    复制代码

    下面代码是:大的table里的第二行的第二个单元格(数字板块),单元格内加入table表格

    复制代码
     1 <td>
     2                     <table id="table2">
     3                         <tr>
     4                             <td>
     5                                 <input type="button" name="" id="" value="7"  onclick="num(7)"/>
     6                             </td>
     7                             <td>
     8                                 <input type="button" name="" id="" value="8"  onclick="num(8)"/>
     9                             </td>
    10                             <td>
    11                                 <input type="button" name="" id="" value="9"  onclick="num(9)"/>
    12                             </td>
    13                         </tr>
    14                         <tr>
    15                             <td>
    16                                 <input type="button" name="" id="" value="4"  onclick="num(4)"/>
    17                             </td>
    18                             <td>
    19                                 <input type="button" name="" id="" value="5"  onclick="num(5)"/>
    20                             </td>
    21                             <td>
    22                                 <input type="button" name="" id="" value="6"  onclick="num(6)"/>
    23                             </td>
    24                         </tr>
    25                         <tr>
    26                             <td>
    27                                 <input type="button" name="" id="" value="1"  onclick="num(1)"/>
    28                             </td>
    29                             <td>
    30                                 <input type="button" name="" id="" value="2"  onclick="num(2)"/>
    31                             </td>
    32                             <td>
    33                                 <input type="button" name="" id="" value="3"  onclick="num(3)"/>
    34                             </td>
    35                         </tr>
    36                         <tr>
    37                             <td>
    38                                 <input type="button" name="" id="" value="0"  onclick="num(0)"/>
    39                             </td>
    40                             <td>
    41                                 <input type="button" name="" id="" value="."  onclick="dian()"/>
    42                             </td>
    43                             <td>
    44                                 <input type="button" name="" id="" value="="  onclick="calc('=')"/>
    45                             </td>
    46                         </tr>
    47                     </table>            
    48             </td>
    复制代码

    下面代码是:大的table里的第二行的第三个单元格(右边板块),单元格内加入table表格

    复制代码
     1 <td>
     2                     <table id="table3">
     3                         <tr>
     4                             <td>
     5                                 <input type="button" name="" id="" value="+"  onclick="calc('+')"/>
     6                             </td>
     7                             <td>
     8                                 <input type="button" name="" id="" value="取整"  onclick="calc('取整')"/>
     9                             </td>
    10                         </tr>
    11                         <tr>
    12                             <td>
    13                                 <input type="button" name="" id="" value="-"  onclick="calc('-')"/>
    14                             </td>
    15                             <td>
    16                                 <input type="button" name="" id="" value="取余"  onclick="calc('%')"/>
    17                             </td>
    18                         </tr>
    19                         <tr>
    20                             <td>
    21                                 <input type="button" name="" id="" value="*"  onclick="calc('*')"/>
    22                             </td>
    23                             <td>
    24                                 <input type="button" name="" id="" value="x^y"  onclick="calc('x^y')"/>
    25                             </td>
    26                         </tr>
    27                         <tr>
    28                             <td>
    29                                 <input type="button" name="" id="" value="/"  onclick="calc('/')"/>
    30                             </td>
    31                             <td>
    32                                 <input type="button" name="" id="" value="+/-"  onclick="calc('+/-')"/>
    33                             </td>
    34                         </tr>
    35                     </table>
    36                 </td>
    37             </tr>
    38         </table>
    39     </body>
    40 </html>
    复制代码

    编写完HTML部分后,对计算器按钮进行布局和美化,可以根据个人想法设置

    以下是CSS部分:

    复制代码
     1 #main{
     2     border: 10px outset orange;
     3     margin: 30px auto;
     4     background: #ABABAB;
     5     box-shadow: 5px 5px #CCCCCC inset;
     6     padding-top: 20px;
     7 }/*设置最外层表格样式*/
     8 th{
     9     height: 40px;
    10     border: 2px outset #CCCCCC;        
    11 }
    12 #result{
    13      100%;
    14     height: 100%;
    15     box-shadow: 3px 3px #CCCCCC inset;
    16     text-align: right;
    17     font-size: 20px;
    18 }
    19 [type=button]{
    20      60px;
    21     height: 40px;
    22     box-shadow: 3px 3px #CCCCCC,3px 3px #CCCCCC inset;
    23     background-image:linear-gradient(to top right,#000,#fff);/*设置按钮渐变色*/
    24     color: #00FFFF;
    25     font-weight: bold;
    26     margin: 5px;
    27     border-radius: 10px/6px;
    28 }/*设置所有butto的样式*/
    29 #table1,#table2,#table3{
    30     margin-top: 20px;
    31     border: 2px outset #CCCCCC;    
    32 }
    33 [type=button]:hover{
    34     background-image:linear-gradient(to top right,#fff,#000);
    35 }
    36 #time{
    37     margin: 0;
    38     padding: 0;
    39     color:#00FFFF;
    40 }
    复制代码

    样式设置好后,开始JS部分,实现简易计算功能

    首先定义几个全局变量,后面实现计算功能时会用上

    1 var sum=0;
    2 var Boo=false;//判断是否按下计算符号
    3 var ope;//存储计算符号的变量

    当我们按下数字键的时候,数字会显示出来,所以先获取数字

    复制代码
     1 //获取数字
     2 function num(Num) {
     3     var result=document.getElementById('result');
     4     if (Boo) {
     5         result.value=Num;
     6         Boo=false;//若接受过运算符,文本框清零
     7     }else{
     8         if (result.value=='0') {
     9             result.value=Num;
    10         } else{
    11             result.value+=Num;
    12         }
    13     }
    14 }
    复制代码

    这个时候,在测试的时候,多次点击小数点,小数点会出现多次,需要避免出现这种情况,indexOf检索字符,没有检索到时,返回-1

    复制代码
    1 //避免出现两个小数点
    2 function dian () {
    3     var result=document.getElementById('result');
    4     if (result.value.indexOf('.')==-1) {
    5         result.value+='.';
    6     }
    7 }
    复制代码

    清零,可以是重新加载页面,也可以将默认值设为零没,这里设置为重新加载;

    退格,没点一次按钮,字符长度减1,当为空时,设置默认值为0;

    复制代码
     1 //清零,重新加载页面
     2 function clean() {
     3         location.replace(location)
     4 }
     5 //退格
     6 function backspace() {
     7     var result=document.getElementById('result');
     8         result.value=result.value.substring(0,result.value.length-1);
     9         if (result.value=='') {
    10             result.value=0;
    11         }
    12 }
    复制代码

    实现这些功能后,进入简易计算功能,需要用到之前定义的全局变量

    首先实现二元运算,如加减乘除等 ,涉及到两个数字的:

    复制代码
     1 function calc(op){
     2     var result=document.getElementById('result').value*1;
     3     if (result=='') {
     4         result=0;
     5     }
     6     Boo=true;
     7     switch (ope){
     8         case '+':
     9             sum=sum+result;
    10             break;
    11         case '-':
    12             sum=sum-result;
    13             break;
    14         case '*':
    15             sum=sum*result;
    16             break;
    17         case '/':
    18             sum=sum/result;
    19             break;
    20         case '取整':
    21             sum=Math.floor(sum/result);
    22             break;
    23         case '%':
    24             sum=sum%result;
    25             break;
    26         case 'x^y':
    27             sum=Math.pow(sum,result);
    28             break;
    29         case '+/-':
    30             sum=result*(-1);            
    31             break;
    32         case '=':
    33             document.getElementById('result').value=sum;
    34             break;
    35         default:sum=parseFloat(result);
    36         break;
    37     }
    38     document.getElementById('result').value=sum;
    39     ope=op;
    40 }
    复制代码

    接着实现一元运算,首先进行角度与弧度的转换,且需要对浮点数的计算进行一点简单处理:

    复制代码
     1 function calc1(op){
     2     var result=document.getElementById('result').value*1;
     3     var  π=Math.PI*2/360;//角度转换成弧度
     4     var deg=360/(Math.PI*2);//弧度转换成角度
     5     if (result=='') {
     6         result=0;
     7     }
     8     Boo=true;
     9     switch (op){
    10         case 'sin':
    11             sum=Math.round(Math.sin(result* π)*100000000000000)/100000000000000;    //sum=Math.sin(result* π);Math.round()解决浮点数运算问题                                                         
    12             break;                                                                    //程序处理浮点数的时候,每一次运算都会取一次近似值,所以最终的结果,总是近似值,而不是我们通过代数得出的结果。
    13         case 'cos':
    14             sum=Math.round(Math.cos(result* π)*100000000000000)/100000000000000;                
    15             break;
    16         case 'tan':
    17             sum=Math.round(Math.tan(result* π)*100000000000000)/100000000000000;        
    18             break;
    19         case 'asin':
    20             sum=Math.round(Math.asin(result)*deg*100000000000000)/100000000000000+'°';            
    21             break;
    22         case 'acos':
    23             sum=Math.round(Math.acos(result)*deg*100000000000000)/100000000000000+'°';        
    24             break;
    25         case 'atan':
    26             sum=Math.round(Math.atan(result)*deg*100000000000000)/100000000000000+'°';    
    27             break;
    28         case 'PI':
    29             sum=Math.PI;            
    30             break;
    31         case '1/x':
    32             sum=1/parseFloat(result);            
    33             break;
    34         case 'exp':
    35             sum=Math.exp(result);
    36             break;
    37         case 'Inx':
    38             sum=Math.log(result);
    39             break;
    40         case 'lgx':
    41             sum=Math.log10(result);
    42             break;
    43         case 'n!':
    44             for (var i=1;i<result;i++) {
    45                 sum=sum*i;
    46             }
    47             break;
    48         default:sum=parseFloat(result);
    49         break;    
    50     }
    51     document.getElementById('result').value=sum;
    52 }
    复制代码

    这样计算器的简易功能基本就实现了,最后我们加上时间,当打开页面的时候,出现时钟:

    复制代码
     1 //设置时间
     2 window.onload=function(){
     3     showTime();
     4 }
     5 function showTime(){
     6         var today=new Date();
     7         var y=today.getFullYear();
     8         var M=today.getMonth()+1;
     9         var d=today.getDate();
    10         var h=today.getHours();
    11         var m=today.getMinutes();
    12         var s=today.getSeconds();
    13         m=checkTime(m);
    14          s=checkTime(s);
    15         var week=today.getDay();
    16         var w=new Array('星期天','星期一','星期二','星期三','星期四','星期五','星期六');
    17         for (var i=0;i<w.length;i++) {
    18             document.getElementById('time').innerHTML=y+'年'+M+'月'+d+'日'+'</br>'+h+":"+m+":"+s+'    '+w[week];
    19         }    
    20    setTimeout('showTime()',500);
    21 }
    22 //数字小于10时,前面添加一个0
    23 function checkTime(i){
    24     if (i<10) {
    25         i="0" + i;
    26     }
    27   return i
    28 }
    复制代码
    引用 粗体 链接 缩进 代码 图片
  • 相关阅读:
    tomcat启动失败日志
    Windows环境卸载tomcat
    JAVA教程_Windows环境Java安装部署教程
    Tomcat和JDK版本的对应关系
    tomcat启动窗口乱码问题_解决办法
    Windows环境Tomcat安装及环境部署_官方教程
    perl + 匹配前导模式一次或者多次
    5.3.5 聚簇索引:
    freshStartTail 第一次启动时 抛弃旧的日志
    tomcat docBase 和 path
  • 原文地址:https://www.cnblogs.com/huangshikun/p/6655509.html
Copyright © 2020-2023  润新知