当前位置: 首页 > news >正文

用script实现的一个简易计算机

目录

一、计算器原理

二、源码

三、结果展示

四、不足与改进


一、计算器原理

首先我们列出想象中简易计算器的样子:

虽然画的磕碜但是应该不影响下面的操作hh

首先想到用表格形式在网页中表示它,是一个5行4列的表格,接着要实现计算器的功能,每个按钮都需要添加事件--->onclick()当鼠标点击时触发, 所有的数字和运算符都要使用onclick触发,等于号和c(清空键)较为特殊,他们需要对应与数字和普通运算符不同的事件:计算结果和清空输入。以及最上方的显示块需要时刻与输入的内容对应也是不同的事件

运算的过程较为简单,只使用了eval()函数进行计算。

最后就是对计算器输入过程的修饰,计算过程不能出现数字后跟多个运算符的情况,如5++或5+-*/,这样会导致eval()函数无法正常计算,所以需要对输入时的事件进行休整。

二、源码

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title><style>table {border: 10px;margin: auto;}td {border: 2px solid black; //单元格边框text-align: center;/*单元格内容居中*/padding: 20px;/*内边距*/}</style></head><body><table><tr><td colspan="4" id="result"></td></tr><tr><td onclick="appendresult('7')">7</td><td onclick="appendresult('8')">8</td><td onclick="appendresult('9')">9</td><td onclick="appendresult('+')">+</td></tr><tr><td onclick="appendresult('4')">4</td><td onclick="appendresult('5')">5</td><td onclick="appendresult('6')">6</td><td onclick="appendresult('-')">-</td></tr><tr><td onclick="appendresult('1')">1</td><td onclick="appendresult('2')">2</td><td onclick="appendresult('3')">3</td><td onclick="appendresult('*')">*</td></tr><tr><td onclick="appendresult('0')">0</td><td id="clear" onclick="clearall()">c</td><td onclick="caculate()">=</td><td onclick="appendresult('/')">/</td></tr></table></body><script>var inputment = ""; //输入的内容function appendresult(value) {// 判断value是数字还是符号if (value == "+" || value == "-" || value == "*" || value == "/") {// 检查最后一个字符是否为运算符if (inputment.length > 0 && (inputment[inputment.length - 1] == "+" ||inputment[inputment.length - 1] == "-" ||inputment[inputment.length - 1] == "*" ||inputment[inputment.length - 1] == "/")) {return; // 如果是运算符,则不添加新的运算符,return不进行任何操作}inputment += value; // 添加新的运算符} else {// 如果是数字,直接添加inputment += value;}update();}function caculate() {var result = eval(inputment);inputment = result.toString(); //更新全局变量update();}function update() {document.getElementById("result").innerText = inputment || "0";}function clearall() {document.getElementById("result").innerText = "";inputment = "";}</script>
</html>

三、结果展示

 

可以看到不会出现多个运算符重复出现的错误。

四、不足与改进

在制作此计算器时,用的是表格来表示计算器,没有考虑到点击形式的问题,使得在使用时鼠标全程是I的状态,不是点击状态,用起来十分别扭,除了将整个表格变成<input>中的按钮状态外,有更便捷的方法来解决:

可以在td的类选择器中添加

cursor: pointer; /* 鼠标悬停时显示手型光标 */

为了使用时更加便捷,还可以使用伪类添加鼠标悬停时的背景色以及点击时的背景色:

td:hover { background-color: #f0f0f0; /* 鼠标悬停时的背景色 */ }

td:active { background-color: #d0d0d0; /* 点击时的背景色 */ } 

 最后的效果:

此时的鼠标放在了数字7上,并且是点击态,再点击后颜色会加深一点。

改进后的代码:

 

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title></title><style>table {border: 10px;margin: auto;}td {border: 2px solid black; //单元格边框text-align: center;/*单元格内容居中*/padding: 20px;/*内边距*/cursor: pointer;/* 鼠标悬停时显示手型光标 */}td:hover {background-color: #f0f0f0;/* 鼠标悬停时的背景色 */}td:active {background-color: #d0d0d0;/* 点击时的背景色 */}</style></head><body><table><tr><td colspan="4" id="result"></td></tr><tr><td onclick="appendresult('7')">7</td><td onclick="appendresult('8')">8</td><td onclick="appendresult('9')">9</td><td onclick="appendresult('+')">+</td></tr><tr><td onclick="appendresult('4')">4</td><td onclick="appendresult('5')">5</td><td onclick="appendresult('6')">6</td><td onclick="appendresult('-')">-</td></tr><tr><td onclick="appendresult('1')">1</td><td onclick="appendresult('2')">2</td><td onclick="appendresult('3')">3</td><td onclick="appendresult('*')">*</td></tr><tr><td onclick="appendresult('0')">0</td><td id="clear" onclick="clearall()">c</td><td onclick="caculate()">=</td><td onclick="appendresult('/')">/</td></tr></table></body><script>var inputment = ""; //输入的内容function appendresult(value) {// 判断value是数字还是符号if (value == "+" || value == "-" || value == "*" || value == "/") {// 检查最后一个字符是否为运算符if (inputment.length > 0 && (inputment[inputment.length - 1] == "+" ||inputment[inputment.length - 1] == "-" ||inputment[inputment.length - 1] == "*" ||inputment[inputment.length - 1] == "/")) {return; // 如果是运算符,则不添加新的运算符,return不进行任何操作}inputment += value; // 添加新的运算符} else {// 如果是数字,直接添加inputment += value;}update();}function caculate() {var result = eval(inputment);inputment = result.toString(); //更新全局变量update();}function update() {document.getElementById("result").innerText = inputment || "0";}function clearall() {document.getElementById("result").innerText = "";inputment = "";}</script>
</html>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DevExpress WPF中文教程:如何将GridControl的更改发布到数据库?
  • 删除排序链表中的重复元素 II(LeetCode)
  • 详解基于百炼平台及函数计算快速上线网页AI助手
  • [Python] ai音色翻译器
  • 安全基础学习-keil调试汇编代码
  • Linux 内核源码分析---块设备
  • C# 设计模式之简单工厂模式
  • GoLang 安装
  • 导出easyExcel(前端vue2/后端springboot)
  • Java 面试常见问题之——为什么重写equals时必须重写hashCode方法
  • thinkphp框架远程代码执行
  • MATLAB在算法处理上的作用
  • 鸿蒙系统学习指南
  • 学习大数据DAY30 python基础语法3
  • 渗透测试--DNS劫持实验
  • 【140天】尚学堂高淇Java300集视频精华笔记(86-87)
  • 〔开发系列〕一次关于小程序开发的深度总结
  • 5、React组件事件详解
  • Apache Spark Streaming 使用实例
  • go append函数以及写入
  • HomeBrew常规使用教程
  • java中具有继承关系的类及其对象初始化顺序
  • JS实现简单的MVC模式开发小游戏
  • k8s 面向应用开发者的基础命令
  • LeetCode18.四数之和 JavaScript
  • React Native移动开发实战-3-实现页面间的数据传递
  • Shell编程
  • windows-nginx-https-本地配置
  • 两列自适应布局方案整理
  • 前端相关框架总和
  • 深入浅出Node.js
  • 微信开源mars源码分析1—上层samples分析
  • 智能合约Solidity教程-事件和日志(一)
  • ​​​【收录 Hello 算法】9.4 小结
  • ​ssh免密码登录设置及问题总结
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • $Django python中使用redis, django中使用(封装了),redis开启事务(管道)
  • $nextTick的使用场景介绍
  • (TOJ2804)Even? Odd?
  • (备份) esp32 GPIO
  • (纯JS)图片裁剪
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .NET/C# 使窗口永不获得焦点
  • /etc/skel 目录作用
  • @PostConstruct 注解的方法用于资源的初始化
  • @Repository 注解
  • @软考考生,这份软考高分攻略你须知道
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • []sim300 GPRS数据收发程序
  • [1181]linux两台服务器之间传输文件和文件夹
  • [AIGC] 深入浅出 Python中的`enumerate`函数
  • [BJDCTF2020]The mystery of ip
  • [BZOJ] 2044: 三维导弹拦截