HTML+CSS+JS实现计算器

news2025/1/16 3:01:32

🙈作者简介:练习时长两年半的Java up主
🙉个人主页:程序员老茶
🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎
📚系列专栏:Java全栈,计算机系列(火速更新中)
💭 格言:种一棵树最好的时间是十年前,其次是现在
🏡动动小手,点个关注不迷路,感谢宝子们一键三连

目录

  • 课程名:HTML+CSS+JS
    • 内容/作用:知识点/设计/实验/作业/练习
    • 学习:HTML+CSS+JS
    • 思路
    • 效果图
    • 代码

课程名:HTML+CSS+JS

内容/作用:知识点/设计/实验/作业/练习

学习:HTML+CSS+JS

思路

  1. 创建HTML页面,包含数字和操作符的按钮以及一个输出框
  2. 使用CSS样式美化页面
  3. 使用JavaScript编写计算器的逻辑,通过绑定事件处理程序,实现对按钮的响应和输出结果到输出框

效果图

在这里插入图片描述

代码

HTML:

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>Calculator</title>
	<link rel="stylesheet" href="style.css">
</head>
<body>
	<div class="calculator">
		<div class="output">
			<input type="text" id="result" disabled>
		</div>
		<div class="btn-row">
			<button class="operator" id="clear">C</button>
			<button class="operator" id="backspace">CE</button>
			<button class="operator" id="divide">/</button>
			<button class="operator" id="multiply">*</button>
		</div>
		<div class="btn-row">
			<button class="number" id="7">7</button>
			<button class="number" id="8">8</button>
			<button class="number" id="9">9</button>
			<button class="operator" id="minus">-</button>
		</div>
		<div class="btn-row">
			<button class="number" id="4">4</button>
			<button class="number" id="5">5</button>
			<button class="number" id="6">6</button>
			<button class="operator" id="plus">+</button>
		</div>
		<div class="btn-row">
			<button class="number" id="1">1</button>
			<button class="number" id="2">2</button>
			<button class="number" id="3">3</button>
			<button class="operator" id="equals">=</button>
		</div>
		<div class="btn-row">
			<button class="number" id="0">0</button>
			<button class="operator" id="decimal">.</button>
		</div>
	</div>
	<script src="app.js"></script>
</body>
</html>

CSS:

* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;
	font-family: Arial, sans-serif;
}

.calculator {
	margin: 50px auto;
	width: 300px;
	background-color: #eee;
	border-radius: 10px;
	padding: 20px;
	box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);
}

.output {
	margin-bottom: 20px;
}

#result {
	width: 100%;
	font-size: 2em;
	text-align: right;
	padding: 5px;
	background-color: #fff;
	border: none;
	border-radius: 5px;
	box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.1);
}

.btn-row {
	display: flex;
	justify-content: space-between;
	margin-bottom: 5px;
}

button {
	background-color: #fff;
	color: #333;
	font-size: 1.5em;
	border: none;
	border-radius: 5px;
	padding: 10px;
	width: 70px;
	height: 70px;
	box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
	cursor: pointer;
	transition: all 0.3s ease;
}

button:hover {
	background-color: #333;
	color: #fff;
	box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
}

.number {
	background-color: #eee;
}

.operator {
	background-color: #f2a53f;
	color: #fff;
}

.btn-row:last-child button {
	width: 150px;
}

.btn-row:last-child button#decimal {
	width: 70px;
}

.btn-row:last-child button#0 {
	width: 150px;
}

JavaScript:

//获取DOM元素
const result = document.getElementById("result");
const clearBtn = document.getElementById("clear");
const backspaceBtn = document.getElementById("backspace");
const divideBtn = document.getElementById("divide");
const multiplyBtn = document.getElementById("multiply");
const minusBtn = document.getElementById("minus");
const plusBtn = document.getElementById("plus");
const equalsBtn = document.getElementById("equals");
const decimalBtn = document.getElementById("decimal");
const numberBtns = document.querySelectorAll(".number");

let currentOperation = null;
let firstOperand = null;

//添加事件监听器
clearBtn.addEventListener("click", () => {
  resetCalculator();
});

backspaceBtn.addEventListener("click", () => {
  result.value = result.value.slice(0, -1);
});

divideBtn.addEventListener("click", () => {
  setOperation("/");
});

multiplyBtn.addEventListener("click", () => {
  setOperation("*");
});

minusBtn.addEventListener("click", () => {
  setOperation("-");
});

plusBtn.addEventListener("click", () => {
  setOperation("+");
});

equalsBtn.addEventListener("click", () => {
  if (currentOperation !== null) {
    compute();
    currentOperation = null;
  }
});

decimalBtn.addEventListener("click", () => {
  if (!result.value.includes(".")) {
    result.value += ".";
  }
});

numberBtns.forEach((button) => {
  button.addEventListener("click", () => {
    if (result.value === "0") {
      result.value = button.innerText;
    } else {
      result.value += button.innerText;
    }
  });
});

//重置计算器
function resetCalculator() {
  currentOperation = null;
  firstOperand = null;
  result.value = "0";
}

//设置操作符
function setOperation(operator) {
  if (currentOperation !== null) {
    compute();
  }
  currentOperation = operator;
  firstOperand = parseFloat(result.value);
  result.value = "0";
}

//计算结果
function compute() {
  const secondOperand = parseFloat(result.value);
  let resultValue;
  switch (currentOperation) {
    case "+":
      resultValue = firstOperand + secondOperand;
      break;
    case "-":
      resultValue = firstOperand - secondOperand;
      break;
    case "*":
      resultValue = firstOperand * secondOperand;
      break;
    case "/":
      resultValue = firstOperand / secondOperand;
      break;
    default:
      return;
  }
  result.value = resultValue;
  firstOperand = resultValue;
}

这是一个基础的计算器,可以进行加、减、乘、除运算,并且支持小数点。如果需要增加新的功能,比如开方、取反、取余等,只需在HTML中添加相应的按钮,并在JavaScript中添加相应的事件监听器和函数即可。

往期专栏
Java全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1149194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

了解C#中Lambda表达式的用法

Lambda表达式是一个匿名函数&#xff0c;是一种高效的类似于函数式编程的表达式&#xff0c;Lambda简化了开发中需要编写的代码量。它可以包含表达式和语句&#xff0c;并且可用于创建委托或表达式目录树类型&#xff0c;支持带有可绑定到委托或表达式树的输入参数的内联表达式…

贝叶斯变分方法:初学者指南--平均场近似

Eric Jang: A Beginners Guide to Variational Methods: Mean-Field Approximation (evjang.com) 一、说明 变分贝叶斯 (VB) 方法是统计机器学习中非常流行的一系列技术。VB 方法允许我们将 统计推断 问题&#xff08;即&#xff0c;给定另一个随机变量的值来推断随机变量的值&…

基本微信小程序的驾校宝典系统-驾照考试系统

项目介绍 系统模块分析是对系统的各个模块做出相应的说明以及解释。此系统的模块分别有用户模块、服务端模块和管理端模块这两大基本模块&#xff0c;其中服务端模块包括了首页、教练信息、教练咨讯、考试预约、我的等&#xff1b;而管理端模块则包括了个人中心、用户管理、教…

什么是 CNN? 卷积神经网络? 怎么用 CNN 进行分类?(2)

参考视频&#xff1a;https://www.youtube.com/watch?vE5Z7FQp7AQQ&listPLuhqtP7jdD8CD6rOWy20INGM44kULvrHu 视频4&#xff1a;CNN 中 stride 的概念 如上图&#xff0c;stride 其实就是 ”步伐“ 的概念。 默认情况下&#xff0c;滑动窗口一次移动一步。而当 stride …

C# OpenCvSharp DNN 部署L2CS-Net人脸朝向估计

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Dnn; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Drawing2D; using System.Linq; using System.Text; using System.Windows.Forms;namespace OpenCvSharp_DNN_Demo …

(1)(1.10) JSN-SR04T声纳

文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 JSN-SR04T 是一种超声波距离传感器。有两个版本 v2.0 和 v3.0。v2.0 的作用范围为 25 至 450cm&#xff0c;v3.0 的作用范围为 20 至 600cm。也更稳定。由于量程很短&#xff0c;因此使用范围有限。 1 连接到自动驾驶仪 …

TensorFlow学习笔记(未完待续)

文章目录 tf.Graph().as_default()sessiontensorflow.placeholder()tf.summary tf.Graph().as_default() with tf.Graph().as_default():with tf.device(/gpu:str(GPU_INDEX)):TensorFlow中所有计算都会被转化为计算图上的节点。是一个通过计算图的形式来表述计算的编程系统&a…

SAP软件如何查询销售订单的删除记录 <转载>

原文链接&#xff1a;https://mp.weixin.qq.com/s/SFC5enOcH1tizeU8N3JHXQ SAP软件中销售订单如果被删除是不能通过VA02和VA3或VA05查询的‍‍到相关记录的&#xff0c;系统会报错&#xff08;如图&#xff09; 销售订单不像某些凭证&#xff08;比如采购订单&#xff0c;采购…

无线接收芯片CMT2219A/无线发射芯片CMT2119A实现无线遥控开关、插座、门铃无线方案

CMT2219A 是一款超低功耗、高性能、OOK 和 (G)FSK 接收器&#xff0c;适用于各种 300 至 960 MHz 无线应用。 它是 CMOSTEK NextGenRFTM 系列的一部分&#xff0c;该系列包括完整的发射器、接收器和收发器系列。 所有功能均可通过离线 EEPROM 编程或在线寄存器写入进行配置。 …

飞利浦的台灯好用吗?飞利浦、书客、雷士护眼台灯对比测评

虽然台灯是许多家庭都会有的照明设备&#xff0c;但是很多家长并不清楚孩子学习时使用的台灯其实是非常有讲究的。如果孩子长时间使用不适合或者劣质的台灯&#xff0c;会在不知不觉中造成视力的损伤&#xff0c;从而近视。所以一款合适的护眼台灯是真的能够很好的起到护眼效果…

不知道怎么显示长标题?这里有小技巧,让你的内容更简洁明了!

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 &#x1f4d8; 文章内容 ⭐ 写在最后 ⭐…

嵌入式软件工程师面试题——2025校招社招通用(五)

说明&#xff1a; 面试题来源于网络书籍&#xff0c;公司题目以及博主原创或修改&#xff08;题目大部分来源于各种公司&#xff09;&#xff1b;文中很多题目&#xff0c;或许大家直接编译器写完&#xff0c;1分钟就出结果了。但在这里博主希望每一个题目&#xff0c;大家都要…

仿真翻页企业内刊制作方法

现如今很多企业都会把自身的企业文化做成电子内刊形式&#xff0c;不再停留于传统纸质的形式&#xff0c;而这种电子版的书更容易被翻阅和传播。特别是员工可以随时随地来阅读企业的文化价值和发展趋向&#xff0c;进而创造出更多的经济效益。不得不说&#xff0c;一本企业文化…

Vue3最佳实践 第八章 ESLint 与 测试 (TypeScript 中Jest与检测环境集成)

TypeScript 中Jest与检测环境集成 ​Vite 已经发布很久了现在Vue3和Vite的生态正在蓬勃发展&#xff0c;现在很多项目中都用到了Vite vue3TypeScript技术栈&#xff0c;进行企业级的项目开发。本文将一步步帮助你创建一个标准的Vite Vue3 TypeScriptJest企业级开发与测试环境…

wxpython如何设置window上任务栏的进度条

该功能是各大编译器或者一些软件在执行耗时操作时&#xff0c;显示进度的一种方式&#xff1a; Qt 如果是使用的pyQt或者是Qt就很简单了&#xff0c;直接使用QWinTaskbarProgress就可以完成该功能。 Wxpython 但是wxpython就没有那么简单了&#xff0c;需要了解一些window的特…

项目经理有责任,没权利,如何确保项目顺利交付?

由于项目经理在项目中所背负的责任并未被赋予相应的权力&#xff0c;因此在协调资源和组织协同工作方面&#xff0c;他们无法简单地借助权力来解决问题。一旦项目出现问题&#xff0c;不论责任在哪一方&#xff0c;项目经理都首当其冲地需要承担责任。 虽然项目经理看似权力很…

SVN出现Cleanup failed to process the following paths...

SVN报错&#xff0c;需要执行SVN的清理命令clean up&#xff0c;但clean up时出现错误Cleanup failed to process the following paths... 解决办法&#xff1a; 1、clean up的窗口&#xff0c;勾选Break locks和Fix time stamps&#xff08;简单方便&#xff09;&#xff1b…

ESP8266模块常规调试过程讲解

ESP8266-WIFI模块串口调试过程讲解 一、ESP8266介绍 ESP8266是一个高度集成的无线SoC(System on a Chip)模块,基于ESP8266芯片,集成了Wi-Fi功能。具有丰富的特性和功能,广泛应用于各种物联网项目中。 ESP8266模块支持802.11b/g/n无线标准,内置TCP/IP协议栈,可以实现串…

Linux之centos7安装配置及Linux常用命令

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《LInux实战开发》。&#x1f3af;&#x1f3af; …

私有云:【7】VCenter安装Composer服务

私有云&#xff1a;【7】VCenter安装Composer服务 1、创建Composer数据库2、VCenter安装Composer服务2.1、安装Native Client组件2.2、对Composer服务器扩容出一个安装盘 3、安装Composer服务 服务器创建好后配置IP&#xff0c;加入域以及添加域管理员cloudadmin&#xff0c;可…