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

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

<html>
<head>
<title>计算器</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
<script src="script.js"></script> </head> <body> <div id="calculator">
<a href="http://write.blog.csdn.net/postlist" id='record'>计Sweet Smile</a>
<div class="rescult">
<textarea type="text" id="result0" οnfοcus="this.blur();"></textarea>
<textarea type="text" id="result" οnfοcus="this.blur();"></textarea>
</div>
<div>
<section class="model-1"> <!--包含按钮的一个长形区域-->
<div class="checkbox" οnclick="styleChange()">
<!--包含按钮的一个较小长形区域-->
<input type="checkbox"/>
<label>科学标准</label> <!--按钮底部的灰色滑动区-->
</div>
</section>
</div> <!--标准计算器布局-->
<div id="rows" style="display:inline;">
<div class="row1">
<button id="bt1" οnclick="zero()">C</button>
<button id="bt2" οnclick="back()">DEL</button>
<button id="bt3" οnclick="divide()">÷</button>
<button id="bt4" οnclick="times()">×</button>
</div>
<div class="row2">
<button id="bt5" οnclick="num(7)">7</button>
<button id="bt6" οnclick="num(8)">8</button>
<button id="bt7" οnclick="num(9)">9</button>
<button id="bt8" οnclick="plus()">+</button>
</div>
<div class="row3">
<button id="bt9" οnclick="num(4)">4</button>
<button id="bt10" οnclick="num(5)">5</button>
<button id="bt11" οnclick="num(6)">6</button>
<button id="bt12" οnclick="minus()">-</button>
</div> <div id="below">
<div id="left">
<div class="row4">
<button id="bt13" οnclick="num(1)">1</button>
<button id="bt14" οnclick="num(2)">2</button>
<button id="bt15" οnclick="num(3)">3</button>
</div>
<div class="row5">
<button id="bt16" οnclick="num(0)">0</button>
<button id="bt17" οnclick="dot()">.</button>
</div>
</div>
<div id="right">
<button id="bt18" οnclick="equal()">=</button>
</div>
</div> </div> <!--科学计算器布局-->
<div id="sci" style="display:none;">
<div class="sci1">
<button id="bt21" οnclick="zero()">C</button>
<button id="bt22" οnclick="back()">DEL</button>
<button id="bt23" οnclick="pow1()">^</button>
<button id="bt24" οnclick="num('π')">π</button>
<button id="bt25" οnclick="pow2()">√</button>
</div>
<div class="sci2">
<button id="bt26" οnclick="sin()">sin</button>
<button id="bt27" οnclick="num('(')">(</button>
<button id="bt28" οnclick="num(')')">)</button>
<button id="bt29" οnclick="divide1()">1/X</button>
<button id="bt30" οnclick="divide()">÷</button>
</div>
<div class="sci3">
<button id="bt31" οnclick="cos()">cos</button>
<button id="bt32" οnclick="num(7)">7</button>
<button id="bt33" οnclick="num(8)">8</button>
<button id="bt34" οnclick="num(9)">9</button>
<button id="bt35" οnclick="times()">×</button>
</div>
<div class="sci4">
<button id="bt36" οnclick="tan()">tan</button>
<button id="bt37" οnclick="num(4)">4</button>
<button id="bt38" οnclick="num(5)">5</button>
<button id="bt39" οnclick="num(6)">6</button>
<button id="bt40" οnclick="minus()">-</button>
</div>
<div class="sci5">
<button id="bt41" οnclick="ln()">ln</button>
<button id="bt42" οnclick="num(1)">1</button>
<button id="bt43" οnclick="num(2)">2</button>
<button id="bt44" οnclick="num(3)">3</button>
<button id="bt45" οnclick="plus()">+</button>
</div>
<div class="sci6">
<button id="bt46" οnclick="log()">log</button>
<button id="bt47" οnclick="num(0)">0</button>
<button id="bt48" οnclick="dot()">.</button>
<button id="bt49" οnclick="quyu()">%</button>
<button id="bt50" οnclick="equal()">=</button>
</div> </div> </div> </body>
</html>

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

//改进: 定义一个变量记录“=”的输入与否而不必每输入数字时都要检索一遍文本框内容

var status=0;	//标记所输入的是数字还是运算符号
var calcu=0; //标记所要执行的方法是哪一个 /*数字、括号及PI的输入*/
function num(x){
var str0=document.getElementById('result0').value;
var str=document.getElementById('result').value;
if(str0.indexOf("=")>0){
document.getElementById('result0').value='';
document.getElementById('result').value='0';
str=document.getElementById('result').value;
}
if(str=="0")
str='';
str+=String(x);
document.getElementById('result').value=str;
status=0;
}
//输入. (未做是否包含“.”的判断)
function dot(){
var str0=document.getElementById('result0').value;
var str=document.getElementById('result').value;
if(str0.indexOf("=")>0){
document.getElementById('result0').value='';
document.getElementById('result').value='0';
str=document.getElementById('result').value;
}
str=str+'.';
document.getElementById('result').value=str;
} /*三角函数以及'1/'计算*/
function sin(){
calcu=1;
cal();
}
function cos(){
calcu=2;
cal();
}
function tan(){
calcu=3;
cal();
}
function divide1(){
calcu=4;
cal();
}
function ln(){
calcu=5;
cal();
}
function log(){
calcu=6;
cal();
}
function cal(){
var str0=document.getElementById('result0').value;
var str=document.getElementById('result').value;
if(str0.indexOf("=")>0){
document.getElementById('result0').value='';
document.getElementById('result').value='0';
str=document.getElementById('result').value;
}
if(str=="0")
str='';
switch(calcu){
case 1: str+=String("sin(");break;
case 2: str+=String("cos(");break;
case 3: str+=String("tan(");break;
case 4: str+=String("1/");break;
case 5: str+=String("ln(");break;
case 6: str+=String("log(");break;
}
document.getElementById('result').value=str;
status=1;
} /* ^、√以及%的输入 */
function pow1(){
calcu=1;
powS();
}
function pow2(){
calcu=2;
powS();
}
function quyu(){
calcu=3;
powS();
}
function powS(){
if(status == 1)
return;
var strpow0=document.getElementById('result0').value;
var strpow=document.getElementById('result').value;
if(strpow0.indexOf("=")>0){
document.getElementById('result0').value='';
/*document.getElementById('result').value='0';*/
strpow=document.getElementById('result').value;
}
switch(calcu){
case 1: strpow+=String('^');
break;
case 2: if(strpow=='0')
strpow="√";
else{
strpow+=String('√');
}
break;
case 3: strpow+=String("%");
break;
}
document.getElementById('result').value=strpow;
status=1;
} /* +-×÷ 运算 */
function plus(){
calcu=1;
calculate();
}
function times(){
calcu=2;
calculate();
}
function divide(){
calcu=3;
calculate();
}
function calculate(){
if(status==1)
return;
var str0=document.getElementById('result0').value;
var str=document.getElementById('result').value;
if(str0.indexOf("=")>0 ){
document.getElementById('result0').value='';
/*document.getElementById('result').value='0';*/
str=document.getElementById('result').value;
}
if(str=='')
str='0';
switch(calcu){
case 1: str+='+';break;
case 2: str+='×';break;
case 3: str+='÷';break;
}
document.getElementById('result').value=str;
status=1;
}
function minus(){
var str0=document.getElementById('result0').value;
var str=document.getElementById('result').value;
if(str0.indexOf("=")>0){
document.getElementById('result0').value='';
/*document.getElementById('result').value='-';*/
str=document.getElementById('result').value+'-';
}
else
str+='-';
document.getElementById('result').value=str;
} //显示屏字符串为空
function zero(){
document.getElementById('result0').value="";
document.getElementById('result').value="0";
} //显示屏字符串减去最后一个字符
function back(){
var str0=document.getElementById('result0').value;
var str=document.getElementById('result').value;
if(str0.indexOf("=")>0 || str=='')
return;
var str1=str.substr(0,(str.length)-1)
document.getElementById('result').value=str1;
} //获取当前显示屏字符,判断所包含运算符,并做相关运算。
function equal(){
var str0=document.getElementById('result').value;
if(str0=="")
return;
var str=str0.replace(/×/g,'*'); //用正则表达式进行全部替换
str=str.replace(/÷/g,'/');
str=str.replace(/π/g,'Math.PI');
if(str.indexOf("sin")>=0){
str=str.replace(/sin/g,'Math.round(Math.sin');
str+='*1000000)/1000000'; document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(str); }
else if(str.indexOf("cos")>=0){
str=str.replace(/cos/g,'Math.round(Math.cos');
str+='*1000000)/1000000';
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(str);
}
else if(str.indexOf("tan")>=0){
str=str.replace(/tan/g,'Math.round(Math.tan');
str+='*1000000)/1000000';
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(str);
}
else if(str.indexOf("^")>=0){
var pos=str0.indexOf('^');
var pow1=str0.substring(0,pos);
var pow2=str0.substring(pos+1,str0.length+1);
result=Math.pow(pow1, pow2);
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(result);
}
else if(str.indexOf("√")>=0){
var pos=str0.indexOf('√');
var pow1=str0.substring(0,pos);
var pow2=str0.substring(pos+1,str0.length+1);
if(pow1==''){
result=Math.pow(pow2,0.5);
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(result);
}
else{
result=Math.pow(pow2, 1/pow1);
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(result);
}
}
else if(str.indexOf("ln")>=0){
var str=str0.replace(/ln/g,'Math.round(Math.log');
str+='*1000000)/1000000';
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(str);
}
else if(str.indexOf("log")>=0){
var str=str0.replace(/log/g,'Math.log');
str+= '/Math.log(10)';
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=eval(str);
}
else{
result=(eval(str));
document.getElementById('result0').value=str0.concat("=");
document.getElementById('result').value=result;
}
var a=document.getElementById('result').value;
if(a=="Infinity")
document.getElementById('result').value='∞';
else if(a=="-Infinity")
document.getElementById('result').value='-∞';
}
function styleChange(){
if(document.getElementById('rows').style.display=='inline'){
document.getElementById('rows').style.display='none';
document.getElementById('sci').style.display='inline';
}
else if(document.getElementById('rows').style.display=='none'){
document.getElementById('rows').style.display='inline';
document.getElementById('sci').style.display='none';
}
}

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

body { 

	font-size:24px;
font-family:Arial, Georgia, "Times New Roman", Times, serif;
color:#555;
text-align:center;
background-color:#555;
}
body div{
align:center;
margin-top:5px;
}
#calculator{
align:center;
width:350px;
height:550px;
margin:10px auto;
border:#fff 2px solid;
overflow:hidden;
background-color:#f2f2f2; } .rescult{
align:center;
padding:10px 5px 0px 5px;
}
#result,#result0{
width:300px;
height:40px;
font-size:35px;
text-align:right;
direction:ltr;
border:#C0C0C0;
overflow:hidden;
background-color:#C0C0C0;
word-wrap : normal;
}
#result0{
font-size:25px;
}
section {
float: left;
width:100px;
padding: 0px 200px 10px 20px;
height: 50px;
} .checkbox {
position: relative;
display: inline-block;
} .checkbox label {
font-size:20px;
text-align: center;
padding-top: 5px;
width: 90px;
height: 30px;
position: relative;
display: inline-block;
border-radius: 46px;
-webkit-transition: 0.4s;
transition: 0.4s;
}
.checkbox label:after {
content: '';
position: absolute;
padding-top: 20px;
width: 45px;
height: 20px;
border-radius: 40%;
left: 0;
top: -5px;
z-index: 2;
background: #f2f2f2;
box-shadow: 0 0 5px rgba(0, 0, 0, 0.2);
-webkit-transition: 0.4s;
transition: 0.4s;
}
.checkbox input {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 5;
opacity: 0;
cursor: pointer;
} .checkbox input:hover + label:after {
box-shadow: 0 2px 15px 0 rgba(0, 0, 0, 0.2), 0 3px 8px 0 rgba(0, 0, 0, 0.2);
}
.checkbox input:checked + label:after {
left: 45px;  
}
.model-1 .checkbox input:checked + label {
background:#ccc ;
}
.model-1 .checkbox input:checked + label:after {
background:#f2f2f2;
} #rows{ align:center;
padding:0 3px; }
#below{
margin-top:0px;
margin-left:25px;
margin-bottom: 30px;
width:300px;
}
#left{
margin-top:0px;
float:left;
}
#right{
margin-top:10px;
float:right;
}
.row1,.row2,.row3,#below{
align:center;
}
.row3{
margin-bottom: 0px;
}
#bt1,#bt2,#bt3,#bt4,#bt5,#bt6,#bt7,#bt8,#bt9,#bt10,#bt11,#bt12,#bt13,#bt14,#bt15,#bt16,#bt17,#bt18{
font-size:18px;
width:70px;
height:70px;
background-color:#eaeaea;
cursor:pointer; }
#bt16{
width:145px;
}
#bt18{
height:140px;
}
#sci{
display:none;
}
#sci button{
font-size:18px;
width:55px;
height:55px;
background-color:#eaeaea;
cursor:pointer; }
#record{
float:right;
font-size:15px;
color:#555;
}
#record:hover{
color:red;
}

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

最新文章

  1. ABP框架理论研究总结(典藏版)
  2. 软件打包为exe NSIS单文件封包工具V2.3
  3. cmdb models数据库结构
  4. Maven项目中找不到maven dependencies library
  5. java 计算一个方法的返回执行时间
  6. c &amp; c++中const
  7. 使用LinkedList实现Stack与Queue
  8. 查看linux中的TCP连接数【转】
  9. 运行phpize失败排查
  10. 【计算几何初步-凸包-Jarvis步进法。】【HDU1392】Surround the Trees
  11. 26个jQuery使用小技巧(25)
  12. 密钥登录linux
  13. TFS 2012使用简介
  14. 深度学习caffe:Ubuntu16.04安装指南(1)
  15. Python 第八天
  16. 8.5 filecmp--文件和文件夹比較处理
  17. 【NOIP2013】华容道(最短路)
  18. 《程序设计入门——C语言》翁恺老师 第二周编程练习记录
  19. nginx 配置 HTTPS 及http 强制跳转https.
  20. 《DSP using MATLAB》Problem 7.24

热门文章

  1. 第 16 章 【硬核!】 垃圾回收相关 GC细讲
  2. MySQL高可用(一)主备同步:MySQL是如何保证主备一致的
  3. zabbix学习(一)——LNMP环境搭建及zabbix安装
  4. C# Socket使用以及DotNetty和Supersocket 框架
  5. python序列(三)列表元素访问与计数
  6. 阿里云Ubuntu配置安装MQTT服务器
  7. Maven仓库是什么
  8. HTML表格样式
  9. ip,子网掩码,网关以及dns简述
  10. JavaCV FFmpeg AAC编码