用JavaScript写一个简单的计算器
本文使用js实现了一个简单的加、减、乘、除计算器。
以下是css部分代码:
*{
padding:0;
margin:0;
color: #424242;
}
.outer{
width:300px;
height:auto;
outline:1px solid #b9b9b9;
margin:50px auto;
background: pink;
}
.title{
height:40px;
width:100%;
border-bottom:1px solid #b9b9b9;
text-align: left;
text-indent:10px;
line-height: 40px;
cursor: pointer;
}
.bodyBox{
width:90%;
height:auto;
padding:5%;
}
.calView{
width:100%;
height:75px;
outline:1px solid #b9b9b9;
background: rgba(255,255,255,.8);
overflow: scroll;
text-indent: 5px;
padding-top:5px;
}
.content,
.contentBtn{
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
}
.btn,
.back,
.reset{
display: inline;
width:22%;
height:30px;
margin-top:15px;
text-align: center;
line-height:30px;
cursor: pointer;
background: #ffe4e8;
outline:none;
border:3px solid #ffa2a5;
border-left:none;
border-top:none;
} .back,
.reset{
width:47%;
}
以下是html部分代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>计算器</title>
<link rel="stylesheet" href="calculator.css">
</head>
<body> <div class="outer">
<div class="title">
<span>计算器</span>
</div>
<div class="bodyBox">
<div class="calView"></div>
<div class="content">
<button class="btn">7</button>
<button class="btn">8</button>
<button class="btn">9</button>
<button class="btn">+</button>
<button class="btn">4</button>
<button class="btn">5</button>
<button class="btn">6</button>
<button class="btn">-</button>
<button class="btn">1</button>
<button class="btn">2</button>
<button class="btn">3</button>
<button class="btn">*</button>
<button class="btn">0</button>
<button class="btn">.</button>
<button class="btn">=</button>
<button class="btn">/</button>
</div>
<div class="contentBtn">
<button class="back">回退</button>
<button class="reset">清空</button>
</div>
</div>
</div> <script src="calculator.js"></script>
</body>
</html>
以下是js部分代码(使用了es6的语法,使用之前请将编辑器设置为支持es6语法):
/**
* Created by Administrator on 2018/10/1.
*/
(function(){
let content=document.getElementsByClassName("content")[0];
let calView=document.getElementsByClassName("calView")[0];
let reset=document.getElementsByClassName("reset")[0];//清空按钮
let back=document.getElementsByClassName("back")[0];//回退按钮
let arr=[];//存放输入的内容
content.onmousedown=function(event){
e=window.event||arguments[0];
let tar=e.target||e.srcElement;
tar.style.boxShadow="-1px -1px 3px #ffa2a5 inset";//设置按钮点击内阴影样式
content.onmouseup=function(event){
tar.style.boxShadow="none";
};
let val=tar.innerText;
if(calView.innerHTML.indexOf("=")!==-1){//如果已经计算出结果,则开始下一次计算,清空数组
calView.innerHTML="";
arr=[];
}
calView.innerHTML="";
arr.push(val);//将输入内容放入数组
if(!isNaN(parseFloat(val))){//如果输入数字,则进行拼接
joinNum(val);
}
if(isNaN(parseFloat(arr[arr.length-2])) && isNaN(parseFloat(arr[arr.length-1]))){//如果上一位和这一位为符号,则删除这一位
arr.pop();
}
show();//更新窗口内容
if(val==="=" && arr.length>1){//如果输入等号,则计算出结果
compute(arr);
}
};
reset.onclick=()=>{//清空输入的内容
calView.innerHTML="";
arr=[];//清空数组
};
back.onclick=()=>{//清空输入的内容
arr.pop();
show();
}; /**
* 拼接输入的内容
* @param val :用户输入的内容
*/
function joinNum(val){
if(!isNaN(parseFloat(arr[arr.length-2]))){//检测上一个是否为数字
arr[arr.length-2]=String(parseFloat(arr[arr.length-2])*10+parseFloat(val));
arr.pop();
}
if(arr[arr.length-2] === "/" && arr[arr.length-1] ==="0"){//如果分母为0,则删除0
arr.pop();
}
} /**
* 更新显示窗口内容
*/
function show(){
let arrLen=arr.length;
let str="";
for(let i=0;i<arrLen;i++){
str+=arr[i];
}
calView.innerHTML=str;//将拼接好的字符串显示在结果窗口中
return str;
} /**
* 计算出最终结果
*/
function compute(arr){
let showStr=show();
calView.innerHTML=showStr + eval(showStr.split("=")[0]).toFixed(6);//由于会出现精度丢失问题,因此这里用toFixed()处理一下
} })();
最终效果如下图所示,样式我写得比较随意,将就看吧!
(本文为原创,转载请注明,谢谢!如果发现bug,请大家提出来!)
用JavaScript写一个简单的计算器的更多相关文章
- 用c++写一个简单的计算器程序
// 050305.cpp : 定义控制台应用程序的入口点.// // 050304.cpp : 定义控制台应用程序的入口点.////四则运算#include "stdafx.h" ...
- 用python语言写一个简单的计算器
假如我们有这样一个式子: 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2 ...
- 用JavaScript写一个简单的倒计时,可以应用在发送短信验证码的“59秒后重新发送验证短信”
倒计时——从10倒数到0,点击按钮会还原倒计时 <body> <!-- 将textvalue值设为10,从10倒数 --> <input type="text& ...
- js eval函数写一个简单的计算器
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 分享:计算机图形学期末作业!!利用WebGL的第三方库three.js写一个简单的网页版“我的世界小游戏”
这几天一直在忙着期末考试,所以一直没有更新我的博客,今天刚把我的期末作业完成了,心情澎湃,所以晚上不管怎么样,我也要写一篇博客纪念一下我上课都没有听,还是通过强大的度娘完成了我的作业的经历.(当然作业 ...
- JS实现一个简单的计算器
使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...
- 怎么用JavaScript写一个区块链?
几乎所有语言都可以编写区块链开发程序.那么如何用JavaScript写一个区块链?以下我将要用JavaScript来创建1个简单的区块链来演示它们的内部到底是怎样工作的.我将会称作SavjeeCoin ...
- JS事件 编程练习-自制计算器 使用JS完成一个简单的计算器功能。实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除。
编程练习 使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除. 提示:获取元素的值设置和获取方法为:例:赋值:document.getElement ...
- 使用JavaScript实现一个简单的编译器
在前端开发中也会或多或少接触到一些与编译相关的内容,常见的有 将ES6.7代码编译成ES5的代码 将SCSS.LESS代码转换成浏览器支持的CSS代码 通过uglifyjs.uglifycss等工具压 ...
随机推荐
- hadoop本地开发环境搭建
1:下载hadoop2.7.3并解压 2:配置hadoop2.7.3环境变量 HADOOP_HOME %HADOOP_HOME%\bin 3:下载hadoop-eclipse-plugin插件 网址: ...
- CodeForces #549 Div.2 ELynyrd Skynyrd 倍增算法
题目 这道题目实际上可以用动态规划来做. 对于每个区间,我们从右边边界,往左边走,如果能走n-1次,那说明以右边边界为起点存在一个题目中说的子链. 利用倍增算法,实际上倍增也是动态规划.f[i][j] ...
- Integer、new Integer() 和 int 比较的面试题
基本概念的区分: 1.Integer 是 int 的包装类,int 则是 java 的一种基本数据类型2.Integer 变量必须实例化后才能使用,而int变量不需要3.Integer 实际是对象的引 ...
- 关于Mysql6.0+的时区错乱问题
如果使用mysql6.0+的JDBC驱动版本的时候,有时候会出现程序时间与数据库时间相差很多个小时; 1.如果以北京时间为例,相差8个小时的情况一般是你在连接jdbc的url中没有标明system_t ...
- [Day18]集合框架Collection、迭代器、增强for循环以及泛型
1.集合 1.1集合-本身是一个存储的容器 集合类的基本接口是Collection接口,这个接口有两个基本方法 (1)boolean add(E element) 用于向集合中添加元素,如果添加元素确 ...
- 对Vuex的初步了解
文章转载于:http://www.cnblogs.com/wisewrong/p/6344390.html 在 Vue.js 的项目中,如果项目结构简单, 父子组件之间的数据传递可以使用 props ...
- Django ORM存储datetime 时间误差8小时问题
今天使用django ORM 将获取到的时间入库,并未出现问题,但是后来发现时间晚了8小时,经查询Django官方文档发现获取本地时间和UTC时间有差别. 首先科普下:UTC是协调世界时 UTC相当于 ...
- 解决配置Windows Update失败问题
大家都清楚电脑总是需要更新一些补丁,不过,很多系统用户发现更新了补丁之后,开机会出现windows update更新失败的情况,提示“配置Windows Update失败,还原更改,请勿关闭计算机”信 ...
- Windows下使用TeamViewer连接远程服务器,以及解决“远程桌面关闭后TeamViewer不能连接”的问题
1.本地安装TeamViewer,完成后如下: 2.远程服务器也安装TeamViewer 在本地TeamViewer中得伙伴ID,输入远程的ID,弹出如下对话框,输入密码即可. 3.这时虽然可以连接, ...
- 7、Flutter banner_view 轮播图的使用
1.前言 实现轮播图,效果如下: 2.实现 将采用 banner_view 实现:资源库地址 2.1.yaml 引入依赖 在 pubspec.yaml 声明需要引用的库,执行命令 flutter pa ...