计算器ajax实现代码,用JQuery写一个计算器

2023-11-16

因为觉得segment fault的markdown界面比CSDN漂亮一些,所以最近正在把博客迁移到这边来,这几天多发了两篇.....

作为一个学习中练手的小demo,选了一个计算器。原因大概只是因为早就想做,比较简单,又确实有很多地方不太清楚,所以选了这个玩意,其实看网上的许多源码,做起来不是很难,但是我还是写了差不多一个礼拜,每天中午午休的一个小时加上下班后的1个小时,星期天也弄了差不都一天,终于基本把整体的功能都完成了,后期我想再迭代优化一下,加上一些CSS3的动画和响应式的功能,让这个小demo可以在手机上跑起来。不过这都是后话了。

废话不多说,上代码吧:

在线计算器

*{

margin: 0;

padding: 0;

color: #fff;

font-family: "微软雅黑";

}

.content{

width: 280px;

height: 510px;

margin: 0 auto;

background: #000;

}

.bar {

height: 20px;

width: 100%;

padding-top: 4px;

box-sizing: border-box;

}

.bar .close{

width: 12px;

height: 12px;

border-radius: 50%;

background: red;

text-align: center;

line-height: 10px;

float: right;

color: red;

font-size: 10px;

margin-right: 4px;

cursor: pointer;

}

.bar .close:hover{

color: #fff;

}

.screen{

width: 260px;

margin-left:10px;

line-height: 140px;

text-align: right;

height: 140px;

font-size: 40px;

font-weight: lighter;

overflow: hidden;

}

.btn{

width: 70px;

height: 70px;

background: #ddd;

font-size: 24px;

text-align: center;

line-height: 70px;

float: left;

box-sizing: border-box;

border: 1px solid #000;

cursor: pointer;

}

.btn:nth-of-type(1),

.btn:nth-of-type(2),

.btn:nth-of-type(3){

background: #bbb;

}

.btn:nth-of-type(4n){

background: #ffb51c;

}

.btn:nth-of-type(17){

width: 140px;

}

.btn:nth-of-type(19){

background: #ffb51c;

}

x
AC
+/-
÷
7
8
9
×
4
5
6
-
1
2
3
+
.
=

$(function(){

var src_show =$(".screen"); //屏幕显示

src_show.html("0");

var result ="", //输出结果

result_1="", //第一个数字

result_2 = ""; //第二个数字

var change=0; //运算符

var num = $(".num"); //数字键

var equal = $(".btn_equal"); //等于符

var calcu = $(".calcu"); //运算符

var reset = $(".btn_reset"); //清零符

var negtive = $(".btn_negtive"), //负号符

neg=1;

var del = $(".btn_delete"); //退格符

//负号操作

negtive.click(function(){

if(src_show.text()=="0"){ //当屏幕显示为0时

src_show.html("-0");

neg=0;

}else if(src_show.text()=="-0"){

src_show.html("0");

neg=1;

}else{ //当屏幕显示不为0

result=src_show.text();

if(neg==0){ //显示为负数时

neg=1;

}else if(neg==1){ //显示为正数时

neg=0;

}

result=-result;

src_show.html(result);

}

})

//数字键

num.click(function(){

result+=$(this).text();

if(neg==0){

src_show.html(-result);

}else{

src_show.html(result);

}

})

//四则运算操作

calcu.click(function(){

result_1=parseFloat(src_show.text());

if($(this).hasClass("btn_plus")){

change=1;

}

if($(this).hasClass("btn_minus")){

change=2;

}

if($(this).hasClass("btn_multiplied")){

change=3;

}

if($(this).hasClass("btn_divided")){

change=4;

}

result="";

src_show.html("0");

neg=1;

});

//等于操作

equal.click(function(){

if(result==""){

result_1=parseFloat(src_show.text());

}else{

result_2 = parseFloat(src_show.text());

}

if(change ==1){

result = result_1+result_2;

}

if(change ==2){

result = result_1-result_2;

}

if(change ==3){

result = result_1*result_2;

}

if(change ==4){

result = result_1/result_2;

}

src_show.html(result);

if(result<0){

neg=0;

}else{

neg=1;

}

result="";

});

//清零符

reset.click(function(){

src_show.html("0");

result ="";

result_1="";

result_2 = "";

change=0;

neg=1;

});

//退格符

del.click(function(){

if(result.length==1||result==""){ //输入一位数退格

result="";

if(neg==1){

src_show.html("0");

}else if(neg==0){

src_show.html("-0");

}

}else{

result=result.substr(0,result.length-1);

if(neg==1){

src_show.html(result);

}else if(neg==0){

src_show.html(-result);

}

}

})

})

代码知识点

因为主要用了JQ的代码,所以知识点主要是JQ的。

1.substr(start,length):选取一个字符串的指定长度的字符。

start为必须参数,是字符串开始位置的index值,length非必须,指定字符串的长度。这个方法会返回指定的字符串。

2.hasClass(className):检查元素是否含有指定的类名。

className不需要带“.”。常用if判断;例:

`if($(this).hasClass("btn_plus")){

change=1;

}`

3.其他的代码十分常用,也没有必要一一列出了。

实现原理

由于在网上看的代码太长,理解够呛,所以这个demo基本上是笔者自己的创作,其中某些思想有借鉴网络,但主要的实现皆为本人。

原理是将数字存储为字符串result,按运算符(+-*/)的时候存储字符串result为第一个数字result_1,同时根据按的不同的运算符,赋给变量change不同的值;并且把result清空以便保存第二个字符串。再输入完第二段字符串时,把它再次赋给result,当按等于符的时候,把result赋给result_2;同时,根据change值的不同,进行不同的运算,得出结果,显示在屏幕上。

其中用了大量的if判断,以至于层层叠叠,我都怕会出什么问题......

最后附上我的github地址,如果你觉得对你有帮助的话,请尽情地用fork和star来“羞辱”我吧!

问题

说不上来问题在哪,感觉代码写得太乱,有点随机应变的感觉,没有很好地做到事先规划,有一种头疼医头脚疼医脚的感觉。

1.在处理负号符的时候,导致了result的值有时是字符串,有时又是数字,我的初衷是在处理字符本身的时候始终以字符串的形式存在,当要调整正负和运算的时候再变成数字,可是由于后期的代码变得冗长,导致我自己越来越糊涂,只能应付了事。

2.迭代。我本来希望能在一个礼拜做成一个能在手机使用的小应用,但是由于时间的计划不太合理,前期的基本功能用了太久才完成。后面我想完善起来,结合响应式,这应该不难。

PS:代码经过初步测试,能正常使用。大神发现有什么bug的,欢迎拍砖指点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算器ajax实现代码,用JQuery写一个计算器 的相关文章

  • 消息摘要算法

    文章目录 概述 MD Message Digest SHA Secure Hash Algorithm MAC Message Authentication Code 其它 概述 看图 我们在下载commons codec时候会有这么一个页
  • 接口接收数据_基于原语的千兆以太网RGMII接口设计

    之前介绍MII接口时 有介绍过RGMII接口的由来 下面在贴一下 表8 7 MII接口介绍 简述 Pins 速率计算 MII 基本的100Mbps 10Mbps接口 RXD 3 0 TXD 3 0 TX ER TX EN RX ER RX
  • 字符串算法题

    1 替换空格 1 剑指offer 请实现一个函数 将一个字符串中的每个空格替换成 20 例如 当字符串为We Are Happy 则经过替换之后的字符串为We 20Are 20Happy 这里我提供了两种方法 常规方法 利用 API 解决
  • 一些可能常用的工具函数

    一些可能常用的工具函数 返回当前的微秒数 1s 1000ms 1ms 1000us 返回当前时间的微秒 long GetCurrentTime timeval tv gettimeofday tv nullptr return tv tv
  • Java8 Stream应用:Map合并、过滤、遍历、values int求和等

    1 Java多个Map合并 多个Map
  • Stream流和不可变集合

    一 不可变集合 什么是不可变集合 不可变集合 就是不可被修改的集合 集合的数据项在创建的时候提供 并且在整个生命周期中都不可改变 否则报错 为什么要创建不可变集合 如果某个数据不能被修改 把它防御性地拷贝到不可变集合中是个很好的实践 或者当
  • 基于Raft协议的两节点主备系统调度算法

    摘要 以城市轨道交通列车指挥调度系统为代表的工业系统受限于工程成本 在运营现场往往仅部署两个服务节点 指挥调度中心因故障离线后 若采用主流的分布式一致性协议保证运营现场节点间数据一致性 将因为降低了可用性而无法容忍节点发生故障 为解决此问题
  • 计算机网络笔记(二)

    计算机网络体系结构 OSI参考模型 数据封装 增加控制信息 构造协议数据单元 PDU 控制信息主要包括 地址 Address 标识发送端 接收端 差错检测编码 Error detecting code 用于差错检测或纠正 协议控制 Prot
  • jsp、servlet、javabean中如何分别设置session的过期时间

    session的概念与基本用法 概念 当用户与服务器连接时 服务器给每个用户一个session 并设定其中内容 这些session相互独立 服务器可以借此来辨别用户信息 进而提供个别服务 session有存在期限 类 javax servl
  • 前端新人进入公司工作流程 超详细!!! 不被当小白

    出来上班除了些人情世故 基本的工作流程还是需要了解的 会避免很多的小麻烦 也不会被别人说是小白 进入公司之后首先熟悉的就是位置 通常产品开发部标配都是组长 前端前辈 后端 测试 UI 产品经理 等其他人员 如果有前辈带你那会更好 很多任务前
  • JWT渗透与攻防(二)

    目录 前言 JWT漏洞演示之CTFhub 一 JWT漏洞演示之CTFhub 二 前言 我们在之前的文章中已经讲解过了JWT漏洞相关的原理和利用 今天我们就通过这篇文章再来了解一下JWT的漏洞 JWT漏洞演示之CTFhub 一 我们进入CTF
  • 用gitmoji在git commit message 添加有意思的表情

    文章目录 用gitmoji在git commit message 添加有意思的表情 用gitmoji在git commit message 添加有意思的表情 用gitmoji 在commit message 添加有意思的表情 让提交代码更有
  • l2tp软件_反向L2TP拨号,接入公司网络

    2019肺炎还没有结束 今天第一天远程复工 前几天介绍了一个全局连回公司网络的方案 但有人私信我 公司没有为了临时办公搭建VPN的准备 大多公司的临时解决方案是用TeamViewer类软件来实现远程连接方案 这类方案基本都不是直连状态 都是
  • RS485通信以及modbus通信协议

    硬件层 rs485解决的是数据传输的问题 如何将0 1 传输到另一端 主机或从机将TTL电平通过485芯片转换成差分信号 抗干扰能力强 传输距离远 485芯片中集成了发送器和接收器 连接单片机io引脚通过高低电平来决定是发送方 还是 接收方
  • “QT 快速上手指南“ 之 计算器(三)信号与槽,connect 函数,QString

    文章目录 前言 一 什么是信号与槽 二 QObject connect 函数 三 QT 中的字符串类 QString 1 创建和初始化字符串 2 字符串的拼接和添加 3 字符串的查找和替换 4 字符串的分割和处理 总结 前言 QT 中 信号
  • 十五个AI图像放大工具

    1 VanceAI Image Enlarger VanceAI Image Enlarger 最大 8x VanceAI Anime Upscaler 动漫图片 最大 16x 2 icons8 Upscaler icons8 Upscal
  • 以太坊创世区块源码分析

    genesis 是创世区块的意思 一个区块链就是从同一个创世区块开始 通过规则形成的 不同的网络有不同的创世区块 主网络和测试网路的创世区块是不同的 这个模块根据传入的genesis的初始值和database 来设置genesis的状态 如
  • mysql callablestatement_mysql jdbc性能优化之mybatis/callablestatement调用存储过程mysql jdbc产生不必要的元数据查询(已解决,cpu负...

    INFO jvm 1 2016 08 25 15 17 01 16 08 25 15 17 01 DEBUG pool 1 thread 371dao ITaskDao callProcedure gt Preparing call sp
  • 开源汇智创未来

    7月27日 2022开放原子全球开源峰会OpenAtom openEuler分论坛在北京成功举办 论坛以 openEuler志高远 开源汇智创未来 为主题 为业界充分展示 openEuler 开源项目的运作成果 传递开源开放的 openEu

随机推荐