HTML+CSS+JS实现计算器

🙈作者简介:练习时长两年半的Java up主

🙉个人主页:程序员老茶

🙊 ps:点赞👍是免费的,却可以让写博客的作者开心好久好久😎

📚系列专栏:Java全栈,计算机系列(火速更新中)

💭 格言:种一棵树最好的时间是十年前,其次是现在

🏡动动小手,点个关注不迷路,感谢宝子们一键三连

目录

课程名:HTML+CSS+JS

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

学习:HTML+CSS+JS

思路

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

效果图

代码

HTML:

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:

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:

js 复制代码
//获取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全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术
相关推荐
袋鼠云数栈前端31 分钟前
如何手写实现 JSON Parser
css·sandbox
亿牛云爬虫专家1 小时前
Puppeteer教程:使用CSS选择器点击和爬取动态数据
javascript·css·爬虫·爬虫代理·puppeteer·代理ip
2401_857610031 小时前
深入探索React合成事件(SyntheticEvent):跨浏览器的事件处理利器
前端·javascript·react.js
熊的猫1 小时前
DOM 规范 — MutationObserver 接口
前端·javascript·chrome·webpack·前端框架·node.js·ecmascript
天农学子1 小时前
Easyui ComboBox 数据加载完成之后过滤数据
前端·javascript·easyui
mez_Blog2 小时前
Vue之插槽(slot)
前端·javascript·vue.js·前端框架·插槽
爱睡D小猪2 小时前
vue文本高亮处理
前端·javascript·vue.js
开心工作室_kaic2 小时前
ssm102“魅力”繁峙宣传网站的设计与实现+vue(论文+源码)_kaic
前端·javascript·vue.js
放逐者-保持本心,方可放逐2 小时前
vue3 中那些常用 靠copy 的内置函数
前端·javascript·vue.js·前端框架
IT古董2 小时前
【前端】vue 如何完全销毁一个组件
前端·javascript·vue.js