本人新手,如果有什么不足的地方,希望可以得到指点

今天尝试用javascript写一个计算器

首先把计算器的按钮做出来,用button做好了,这样可以不用设置太多的样式

<button value="7" >7</button>

按照上面把0-9数字的按钮都搞出来 当然还有+-*/=%这些按钮

顺便给每个按钮添加样式 如下:

<style>

  .short{height:63px;width:55px;float:left;}

</style>

<button value="7" class="short">7</button>

在按钮顶部添加一个屏幕用input的text来做:

<input type="text" id="pingmu" style="height:36px;width:276px;"/><br/>

然后下面的方式进行排版

<-屏幕->

7 8 9  * /

4 5 6 -  %

1 2 3 + =

显示的效果如下

基本上样式上就简单的完成了,现在来解决脚本的问题

为了思路不混淆,先来实现按钮的输出,不考虑计算方面的问题

可以利用每个按钮自带的value属性来获取其值如下:

<button value="7" class="short" onclick="num(this.value)">7</button>

然后写一个num函数

<script>
function num(a){
var pingmu=document.getElementById("pingmu") //获得屏幕对象
pingmu.value=a; //把按钮的值输出出来
}
</script>

虽然屏幕可以成功显示每个按钮按下后的值,但是如果想要按出大于一位的数字比如六十四(64)的时候,你会发现

只能分别按出6 和 4,而按不出64,因此需要添加一个变量用于临时保存显示的值,这个变量就用xianshi来命名好了

每次按下按钮,xianshi变量就会保存按下的值,最后在输出

当然如果你连续按下数字后 再按运算符号时,符号也会被保存,

因此需要判断按钮的值是数字还是符号

如果是数字xianshi变量就保存其值

如果是符号那么只输出符号,并且清空xianshi变量的值

因为如果不清空,按完符号再按数字时,数字就会把以前的值显示出来 比如:按12 + 6

按完后因为前面的值没清空 所以会显示:126的结果

<script>
var xianshi="";
function num(a){
var pingmu=document.getElementById("pingmu");
if(!isNaN(a)){ //判断是否是数字
xianshi+=a;
pingmu.value=xianshi;
}
else{pingmu.value=a;xianshi="";}
}
</script>

然后实现计算功能

思路:声明一个变量jisuan用于保存jisuan的值,然后用eval函数将字符串转变为代码。

当然jisuan的第一个字符不能是符号,因此需要判断第一个按钮是否为符号,代码如下

<script>
var jisuan="";
var xianshi="";
function num(a){
if(jisuan==""&&isNaN(a))return 0; //首次输入值不能为符号
jisuan+=a;
var pingmu=document.getElementById("pingmu");
if(!isNaN(a)){xianshi+=a;pingmu.value=xianshi;}
else{pingmu.value=a;xianshi="";}
} function sum(){ //计算结果函数
if(jisuan=="")renturn0; //首个按钮不能为=
var pingmu=document.getElementById("pingmu");
total=eval(jisuan)
pingmu.value=total;
jisuan="";xianshi="";
}
</script>
<button value="=" class="sum()" onclick="sum()">=</button>

下面实现缓存功能

计算部分就初步完成了,但是缺少了些功能,比如算完3+3得出的结果6,这时希望用6的值继续下次计算时就实现不了

因此需要添加缓存功能,对上面的代码进一步修改

<script>
var xianshi="";
var jisuan="";
var huanchun=""; function num(a){
if(jisuan==""&&huanchun==""&&isNaN(a))return 0;
var pingmu=document.getElementById("pingmu");
if(!isNaN(a)){xianshi+=a;pingmu.value=xianshi;jisuan+=a;huanchun="";}
else{pingmu.value=a;xianshi="";jisuan=jisuan+huanchun+a;huanchun="";}
} function sum(){
if(jisuan=="")renturn0;
document.getElementById("pingmu");
total=eval(jisuan)
pingmu.value=total;
jisuan="";xianshi="";huanchun=total;
}
</script>

大功告成

不过没有删除键,所以再写个删除键吧,这个函数只需要把所有变量的值清空就完成了

function ccc(){
jisuan="";xianshi="";huanchun="";
document.getElementById("pingmu").value="";
}

HTML:

<button value="c" class="short" onclick="ccc()">C</button>

这里函数名不可以用clear,因为会出错,至于为什么我也不知道,可能侵犯了关键字的权益

感觉要是再加点二进制与十进制的转换就更完美了

function ten(){
var total=0,pows=0
var pingmu=document.getElementById("pingmu");
var value=pingmu.value;
var arr=value.split("");
arr=arr.reverse();
for(i=0;i<arr.length;i++){
arr[i]-=0;
pows=Math.pow(2,i);
total+=arr[i]*pows;
}
pingmu.value=total;
jisuan="";xianshi="";
} function two(){
var pingmu=document.getElementById("pingmu");
var value=pingmu.value;
value-=0;
var arr=new Array();
for(i=0;1;i++){
if(value==0)break;
arr[i]=value%2;
value/=2;
value=parseInt(value);
}
arr=arr.reverse();
str=arr.join("");
pingmu.value=str;
xianshi="";jisuan="";
}
<button value="x" class="short" onclick="ten()">ten</button>
<button value="x" class="short" onclick="two()">two</button>

最终效果如下:

博文中不允许有javascript代码所以具体的效果就法显示啦

用javascript写计算器的更多相关文章

  1. JavaScript写计算器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. JavaScript 写计算器改进版

    <html><head><style> .short{height:50px;width:55px;float:left;}</style></h ...

  3. 用javascript 写个函数返回一个页面里共使用了多少种HTML 标签

    今天我无意间看到一个面试题: 如何用javascript 写个函数返回一个页面里共使用了多少种HTML 标签? 不知你看到 是否蒙B了,如果是我 面试,肯定脑子嗡嗡的响.... 网上搜了搜也没有找到答 ...

  4. JavaScript写在Html页面的<head></head>中

    JavaScript写在Html页面的<head></head>中 ----------------- <html> <head> <style ...

  5. JavaScript写一个连连看的游戏

    天天看到别人玩连连看, 表示没有认真玩过, 不就把两个一样的图片连接在一起么, 我自己写一个都可以呢. 使用Javascript写了一个, 托管到github, 在线DEMO地址查看:打开 最终的效果 ...

  6. javascript写在<head>和<body>里的区别

    Javascript写在哪里?概括起来就是三种形式:1. 内部:Html网页的<body></body>中:2. 内部:Html网页的<head></head ...

  7. 原生javascript写的侧栏跟随效果

    浏览网站时经常看到有的网站上,当一个页面很长的时候,设定侧栏内容会跟随滚动条滚动,我们把这种效果叫做“侧栏跟随滚动”.这种特效对提高网站浏览量.文章点击率.广告点击量都有一定效果. 侧栏跟随滚动的实现 ...

  8. javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数

    javascript 写一段代码,判断一个字符串中出现次数最多的字符串,并统计出现的次数 function test(){ var bt = document.getElementById(" ...

  9. 用JavaScript写一个区块链

    几乎每个人都听说过像比特币和以太币这样的加密货币,但是只有极少数人懂得隐藏在它们背后的技术.在这篇博客中,我将会用JavaScript来创建一个简单的区块链来演示它们的内部究竟是如何工作的.我将会称之 ...

随机推荐

  1. 织梦修改文档HTML默认保存路径

    \data\config.cache.inc.php $cfg_arcdir = '/a'; 改为 $cfg_arcdir = '/';

  2. Ubuntu 自动获取ip地址

    $ sudo dhclient -r               //release ip 释放IP$ sudo dhclient                  //获取IP手動使用 DHCP 自 ...

  3. Android 开发干货,键盘状态

    地址:http://www.imooc.com/article/4711 [A]stateUnspecified:软键盘的状态并没有指定,系统将选择一个合适的状态或依赖于主题的设置 [B]stateU ...

  4. MySQL查询示例

    use test; create table t1(tid smallint(5) unsigned auto_increment,tname varchar(50),tkecheng varchar ...

  5. Python中的绝对路径和相对路径

    大牛们应该对路径都很了解了,这篇文章主要给像我这样的入门小白普及常识用的,啊哈 下面的路径介绍针对windows,其他平台的暂时不是很了解. 在编写的py文件中打开文件的时候经常见到下面其中路径的表达 ...

  6. MATLAB中容易忽略却经常遇到的小技巧总结

    1       如何产生一个列向量相同的矩阵 例如,列向量x=[1;2;3],要产生矩阵A=[x,x,x],即[1,1,1;2,2,2;3,3,3]. A = repmat(x,1,n) 2      ...

  7. [dp uestc oj] G - 邱老师玩游戏

    G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  8. Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  9. Python-OpenCV中的resize()函数

    改变图像大小意味着改变尺寸,无论是单独的高或宽,还是两者.也可以按比例调整图像大小. 这里将介绍resize()函数的语法及实例. 语法 函数原型 cv2.resize(src, dsize[, ds ...

  10. wine卸载

    Wine手动卸载,出现殘留,导致安装其他软件也不成功. 错误如下: 正在读取软件包列表... 完成正在分析软件包的依赖关系树       正在读取状态信息... 完成       您也许需要运行“ap ...