基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)


Posted in Javascript onJanuary 05, 2016

之前发布了一款简易的计算器,今天做了一下修改,添加了键盘监听事件,不用再用鼠标点点点啦

JS代码:

var yunSuan = 0;// 运算符号,0-无运算;1-加法;2-减法;3-乘法;4-除法
var change = 0;// 属于运算符后需要清空上一数值
var num1 = 0;// 运算第一个数据
var num2 = 0;// 运算第二个数据
var cunChuValue = 0;// 存储的数值
$(function() {
$(".number").click(function() {// 点击数字触发事件
var num = $(this).attr('name');
var oldValue = $("#jieguo").html();
if (change == 1) {
oldValue = "0";
change = 0;
}
var newValue = "";
if (num == -1) {
oldValue = parseFloat(oldValue);
newValue = oldValue * -1;
} else if (num == ".") {
if (oldValue.indexOf('.') == -1)
newValue = oldValue + ".";
else
newValue = oldValue;
} else {
if (oldValue == 0 && oldValue.indexOf('.') == -1) {
newValue = num;
} else {
newValue = oldValue + num;
}
}
$("#jieguo").html(newValue);
});
$("#qingPing").click(function() {// 点击清屏触发事件
$("#jieguo").html("0");
yunSuan = 0;
change = 0;
num1 = 0;
num2 = 0;
});
$("#tuiGe").click(function() {// 点击退格触发事件
if (change == 1) {
yunSuan = 0;
change = 0;
}
var value = $("#jieguo").html();
if (value.length == 1) {
$("#jieguo").html("0");
} else {
value = value.substr(0, value.length - 1);
$("#jieguo").html(value);
}
});
$(".yunSuan").click(function() {// 点击运算符号触发事件
change = 1;
yuSuan = $(this).attr('name');
var value = $("#jieguo").html();
var dianIndex = value.indexOf(".");
if (dianIndex == value.length) {
value = value.substr(0, value.length - 1);
}
num1 = parseFloat(value);
});
$("#dengYu").click(function() {// 点击等于符号触发事件
var value = $("#jieguo").html();
var dianIndex = value.indexOf(".");
if (dianIndex == value.length) {
value = value.substr(0, value.length - 1);
}
num2 = parseFloat(value);
var sum = 0;
if (yuSuan == 1) {
sum = num1 + num2;
} else if (yuSuan == 2) {
sum = num1 - num2;
} else if (yuSuan == 3) {
sum = num1 * num2;
} else if (yuSuan == 4) {
sum = num1 / num2;
} else if (yuSuan == 0 || num1 == 0 || num2 == 0) {
sum = num1 + num2;
}
var re = /^[0-9]+.?[0-9]*$/;
if (re.test(sum)) {
sum = sum.toFixed(2);
}
$("#jieguo").html(sum);
change = 1;
yuSuan = 0;
num1 = 0;
num2 = 0;
});
$("#cunChu").click(function() {// 点击存储触发事件
change = 1;
var value = $("#jieguo").html();
var dianIndex = value.indexOf(".");
if (dianIndex == value.length) {
value = value.substr(0, value.length - 1);
}
cunChuValue = parseFloat(value);
});
$("#quCun").click(function() {// 点击取存触发事件
change = 1;
$("#jieguo").html(cunChuValue);
});
$("#qingCun").click(function() {// 点击清存触发事件
change = 1;
cunChuValue = 0;
});
$("#leiCun").click(function() {// 点击累存触发事件
change = 1;
var value = $("#jieguo").html();
var dianIndex = value.indexOf(".");
if (dianIndex == value.length) {
value = value.substr(0, value.length - 1);
}
cunChuValue += parseFloat(value);
});
$("#jiCun").click(function() {// 点击积存触发事件
change = 1;
var value = $("#jieguo").html();
var dianIndex = value.indexOf(".");
if (dianIndex == value.length) {
value = value.substr(0, value.length - 1);
}
if (cunChuValue == 0) {
cunChuValue = parseFloat(value);
} else {
cunChuValue = cunChuValue * parseFloat(value);
}
});
});
// 按键监听
$(document)
.keydown(
function(event) {
// 数字监听
if (((event.keyCode > 47 && event.keyCode < 58)
|| (event.keyCode > 95 && event.keyCode < 106) || (event.keyCode == 190 || event.keyCode == 110))
&& !event.shiftKey) {
keyDownNum(event.keyCode);
}
// "+"监听
if ((event.keyCode == 187 && event.shiftKey)
|| event.keyCode == 107) {
keyDownYuSuan(1);
}
// "-"监听
if ((event.keyCode == 189 && event.shiftKey)
|| event.keyCode == 109) {
keyDownYuSuan(2);
}
// "*"监听
if ((event.keyCode == 56 && event.shiftKey)
|| event.keyCode == 106) {
keyDownYuSuan(3);
}
// "/"监听
if (event.keyCode == 191 || event.keyCode == 111) {
keyDownYuSuan(4);
}
// "="监听
if ((event.keyCode == 187 && !event.shiftKey)
|| event.keyCode == 13) {
$("#dengYu").click();
}
// "回退"监听
if (event.keyCode == 8) {
$("#tuiGe").click();
return false;
}
// "清屏"监听
if (event.keyCode == 27 || event.keyCode == 46
|| (event.keyCode == 110 && event.shiftKey)) {
$("#qingPing").click();
return false;
}
// "存储"监听
if (event.keyCode == 112) {
$("#cunChu").click();
return false;
}
// "取存"监听
if (event.keyCode == 113) {
$("#quCun").click();
return false;
}
// "累存"监听
if (event.keyCode == 114) {
$("#leiCun").click();
return false;
}
// "积存"监听
if (event.keyCode == 115) {
$("#jiCun").click();
return false;
}
// "清存"监听
if (event.keyCode == 117) {
$("#qingCun").click();
return false;
}
});
/**
* 按键触发运算符 value 1-'+' 2-'-' 3-'*' 4-'/'
*/
function keyDownYuSuan(value) {
change = 1;
yuSuan = value;
var value = $("#jieguo").html();
var dianIndex = value.indexOf(".");
if (dianIndex == value.length) {
value = value.substr(0, value.length - 1);
}
num1 = parseFloat(value);
}
/**
* 按键触发数字 code ASCLL码
*/
function keyDownNum(code) {
var number = 0;
if (code == 48 || code == 96) {// "0"监听
number = 0;
}
if (code == 49 || code == 97) {// "1"监听
number = 1;
}
if (code == 50 || code == 98) {// "2"监听
number = 2;
}
if (code == 51 || code == 99) {// "3"监听
number = 3;
}
if (code == 52 || code == 100) {// "4"监听
number = 4;
}
if (code == 53 || code == 101) {// "5"监听
number = 5;
}
if (code == 54 || code == 102) {// "6"监听
number = 6;
}
if (code == 55 || code == 103) {// "7"监听
number = 7;
}
if (code == 56 || code == 104) {// "8"监听
number = 8;
}
if (code == 57 || code == 105) {// "9"监听
number = 9;
}
if (code == 190 || code == 110) {// "."监听
number = ".";
}
var num = number;
var oldValue = $("#jieguo").html();
if (change == 1) {
oldValue = "0";
change = 0;
}
var newValue = "";
if (num == -1) {
oldValue = parseFloat(oldValue);
newValue = oldValue * -1;
} else if (num == ".") {
if (oldValue.indexOf('.') == -1)
newValue = oldValue + ".";
else
newValue = oldValue;
} else {
if (oldValue == 0 && oldValue.indexOf('.') == -1) {
newValue = num;
} else {
newValue = oldValue + num;
}
}
$("#jieguo").html(newValue);
}

HTML/CSS代码:

<%@ page language="java" contentType="text/html; charset=UTF-"
pageEncoding="UTF-"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=" utf-">
<title>简易计算器</title>
<jsp:include page="inc/easyui.jsp"></jsp:include>
<style type="text/css">
button {
font-size: px;
font-weight: bold;
width: px;
}
</style>
<script type="text/javascript" src="js.js"></script>
</head>
<body>
<table>
<tr>
<td colspan="">
<div id="jieguo"
style="width: px;height: px;font-size: px;text-align: right;font-weight:bold;color: red;"></div>
</td>
</tr>
<tr style="height: px;">
<td>
<button id="cunChu">存储(F)</button></td>
<td>
<button id="quCun">取存(F)</button></td>
<td>
<button id="tuiGe"> 退 格 </button></td>
<td>
<button id="qingPing"> 清 屏 </button></td>
</tr>
<tr style="height: px;">
<td>
<button id="leiCun">累存(F)</button></td>
<td>
<button id="jiCun">积存(F)</button></td>
<td>
<button id="qingCun">清存(F)</button></td>
<td>
<button id="Chuyi" class="yunSuan" name="">  ÷  </button>
</td>
</tr>
<tr style="height: px;">
<td>
<button id="seven" class="number" name="">    </button>
</td>
<td>
<button id="eight" class="number" name="">    </button>
</td>
<td>
<button id="nine" class="number" name="">    </button>
</td>
<td>
<button id="chengYi" class="yunSuan" name="">  ×  </button>
</td>
</tr>
<tr style="height: px;">
<td>
<button id="four" class="number" name="">    </button>
</td>
<td>
<button id="five" class="number" name="">    </button>
</td>
<td>
<button id="six" class="number" name="">    </button>
</td>
<td>
<button id="jianQu" class="yunSuan" name="">  -  </button>
</td>
</tr>
<tr style="height: px;">
<td>
<button id="one" class="number" name="">    </button>
</td>
<td>
<button id="two" class="number" name="">    </button>
</td>
<td>
<button id="three" class="number" name="">    </button>
</td>
<td>
<button id="jiaShang" class="yunSuan" name="">  +  </button>
</td>
</tr>
<tr style="height: px;">
<td>
<button id="zero" class="number" name="">    </button>
</td>
<td>
<button id="dian" class="number" name=".">  .  </button>
</td>
<td>
<button id="zhengFu" class="number" name="-">  +/-  </button>
</td>
<td>
<button id="dengYu">  =  </button></td>
</tr>
</table>
</body>
</html>

计算器样式布局时借鉴别人的,但是代码均是本人自己写的,由于时间原因没有来得及测试,各位大侠在使用过程中发现有bug欢迎提出,共同学习进步,谢谢。

Javascript 相关文章推荐
解决jQuery动态获取手机屏幕高和宽的问题
May 07 Javascript
Javascript字符串浏览器兼容问题分析
Dec 01 Javascript
JavaScript中Cookie操作实例
Jan 09 Javascript
JavaScript中的toUTCString()方法使用详解
Jun 12 Javascript
jQuery实现点击小图片淡入淡出显示大图片特效
Sep 09 Javascript
js获取ip和地区
Mar 10 Javascript
关于javascript sort()排序你可能忽略的一点理解
Jul 18 Javascript
js如何找出字符串中的最长回文串
Jun 04 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
Jul 30 Javascript
实例详解BootStrap的动态模态框及静态模态框
Aug 13 Javascript
Node.js操作MongoDB数据库实例分析
Jan 19 Javascript
element el-table表格的二次封装实现(附表格高度自适应)
Jan 19 Javascript
JavaScript实现简单的tab选项卡切换
Jan 05 #Javascript
javascript实现简单的全选和反选功能
Jan 05 #Javascript
Javascript原型链的原理详解
Jan 05 #Javascript
深入浅析JavaScript系列(13):This? Yes,this!
Jan 05 #Javascript
基于javascript实现图片懒加载
Jan 05 #Javascript
this,this,再次讨论javascript中的this,超全面(经典)
Jan 05 #Javascript
基于javascript实现图片预加载
Jan 05 #Javascript
You might like
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
thinkPHP中验证码的简单使用方法
2015/12/26 PHP
js压缩利器
2007/02/20 Javascript
定义select的边框颜色
2008/04/28 Javascript
23个超流行的jQuery相册插件整理分享
2011/04/25 Javascript
关于JQuery($.load)事件的用法和分析
2013/04/09 Javascript
JQuery中dataGrid设置行的高度示例代码
2014/01/03 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
jquery实现漂亮的二级下拉菜单代码
2015/08/26 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
vue模仿网易云音乐的单页面应用
2019/04/24 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
使用Python3编写抓取网页和只抓网页图片的脚本
2015/08/20 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
Python解析Excle文件中的数据方法
2018/10/23 Python
python 实现快速生成连续、随机字母列表
2019/11/28 Python
pytorch实现CNN卷积神经网络
2020/02/19 Python
python 递归调用返回None的问题及解决方法
2020/03/16 Python
python 穷举指定长度的密码例子
2020/04/02 Python
Python request post上传文件常见要点
2020/11/20 Python
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
linux面试相关问题
2012/08/11 面试题
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
爱国主义教育活动总结
2014/05/07 职场文书
学校安全管理责任书
2014/07/23 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
网站出售协议书范文
2014/10/10 职场文书
2014年基层党支部工作总结
2014/12/04 职场文书
先进党支部申报材料
2014/12/24 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
2016庆祝教师节新闻稿
2015/11/25 职场文书
redis复制有可能碰到的问题汇总
2022/04/03 Redis