基于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文本框高亮显示插件代码
Apr 02 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
Jun 05 Javascript
node.js中的fs.fstat方法使用说明
Dec 15 Javascript
js实现横向拖拽导航条功能
Feb 17 Javascript
JS实现手写parseInt的方法示例
Sep 24 Javascript
JS 仿支付宝input文本输入框放大组件的实例
Nov 14 Javascript
JS扩展String.prototype.format字符串拼接的功能
Mar 09 Javascript
vsCode安装使用教程和插件安装方法
Aug 24 Javascript
socket在egg中的使用实例代码详解
May 30 Javascript
微信小程序图片加载失败时替换为默认图片的方法
Dec 09 Javascript
vue项目中监听手机物理返回键的实现
Jan 18 Javascript
图解JS原型和原型链实现原理
Sep 15 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
phplock(php进程锁) v1.0 beta1
2009/11/24 PHP
php一些错误处理的方法与技巧总结
2013/08/10 PHP
php之readdir函数用法实例
2014/11/13 PHP
ThinkPHP实现静态缓存和动态缓存示例代码
2017/05/02 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
2011/09/13 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
Vuex 进阶之模块化组织详解
2018/01/12 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
JavaScript实现小球沿正弦曲线运动
2020/09/07 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
微信小程序 拍照或从相册选取图片上传代码实例
2019/08/28 Javascript
Angular8 实现table表格表头固定效果
2020/01/03 Javascript
NodeJS开发人员常见五个错误理解
2020/10/14 NodeJs
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
Python 加密的实例详解
2017/10/09 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
Django REST framwork的权限验证实例
2020/04/02 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
英国可持续奢侈品包包品牌:Elvis & Kresse
2018/08/05 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
2013年员工自我评价范文
2013/12/27 职场文书
售后服务承诺书范文
2014/03/26 职场文书
申报优秀教师材料
2014/12/16 职场文书
拾金不昧表扬信怎么写
2015/05/04 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
2019关于实习生工作安排及待遇的管理方案!
2019/07/16 职场文书
聊聊CSS粘性定位sticky案例解析
2022/06/01 HTML / CSS