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

devtools/2024/9/25 8:33:35/
htmledit_views">

目录

一、计算器原理

二、源码

三、结果展示

四、不足与改进


一、计算器原理

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

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

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

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

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

二、源码

html"><!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上,并且是点击态,再点击后颜色会加深一点。

改进后的代码:

 

html"><!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>

http://www.ppmy.cn/devtools/88544.html

相关文章

【人工智能专栏】Gradient Clip 梯度裁剪(防止梯度爆炸或消失的技术)

Gradient Clip 梯度裁剪 有啥用 NB: 深度学习里面的梯度裁剪(Gradient Clipping)是一种防止梯度爆炸或消失的技术,它可以限制梯度的范数或值在一个合理的范围内,从而保证模型的稳定训练。 梯度裁剪有两种常见的方法: 按照梯度的L2范数进行裁剪,即如果梯度的L2范数超过了…

JavaSE第11篇:设计模式

一、创建型模式 1、工厂方法模式 2、抽象工厂模式 3、单例模式singleton /*** 单例* 饿汉式(线程安全的):在加载类的时候就会创建类的单例&#xff0c;并保存在类中。* 1.定义类变量实例并直接实例化&#xff0c;在类加载的时候就完成了实例化并保存在类中;* 2.定义无参构造…

Upload-labs靶场Pass01-Pass21全解

文章目录 Pass-01 前端JSJS绕过上传或者用burp抓包的方式 Pass-02 MIME检测Pass-03 特殊文件后缀黑白名单绕过特殊文件名绕过 Pass-04 .htacess上传Pass-05 user.ini文件上传Pass-06 大小写绕过Pass-07 空格绕过Pass-08 .绕过Pass-09 ::$DATA绕过Pass-10 .空格.绕过Pass-11 双写…

C#进阶-轻量级ORM框架Dapper的使用教程与原理详解

本文详细介绍了Dapper在C#中的使用方法&#xff0c;包括Dapper的基本概念、与其他持久层框架的比较、基本语法和高级语法的使用&#xff0c;并通过实例讲解了如何在项目中集成和使用Dapper。Dapper以其高效的性能和简洁的API受到开发者的青睐&#xff0c;适用于各种数据库操作需…

付费进群系统源码原版最新修复全开源版

付费进群&#xff0c;和平时所见到的别人拉你进群是不一样的&#xff0c;付费进群需要先缴费以后&#xff0c;才会看到群的二维码&#xff0c;扫码进群或者是长按二维码图片识别进群&#xff0c;付费进群这个功能广泛应用于拼多多的砍价群&#xff0c;活动的助力群&#xff0c;…

关于qt中如何布局

qt中有水平布局 垂直布局等等 1 可把控件放到空窗口中进行水平布局 要想有间隙 加弹簧即可 lineedit控件中若想让输入的数在屏幕上显示密码 别人不可见 usernameLineEdit->text(); 这个函数是获取用户输入 然后与if else 中的密码相匹配 #include <QApplication> #inc…

湖北汽车工业学院-高等数学考纲

湖北汽车工业学院2024年普通专升本考试的《高等数学》考试大纲已经公布。考试形式为闭卷笔试&#xff0c;满分100分&#xff0c;考试时间为90分钟。考试内容主要包括以下几个部分&#xff1a; 1. **函数、极限、连续**&#xff1a; 涉及函数概念、表示法、有界性、周期性、奇偶…

JavaScript模块化

JavaScript模块化 一、CommonJS规范1、在node环境下的模块化导入、导出 2、浏览器环境下使用模块化browserify编译js 二、ES6模块化规范1、在浏览器端的定义和使用2、在node环境下简单使用方式一&#xff1a;方式二&#xff1a; 3、导出数据4、导入数据5、数据引用问题 一、Com…