为了实现这个iPhone风格的计算器,我们将编写一个完整的HTML页面,其中包含CSS样式和JavaScript逻辑。
以下是关于这个iPhone风格计算器的关键功能和设计的详细介绍:
关键功能
- 显示区域 (
display
):
- 显示当前输入的数字或计算结果。
- 初始状态下显示为
0
。
- 数字按钮 (
gray-button
):
- 包括数字
0-9
和小数点.
按钮。 - 点击时将数字或小数点添加到当前输入中。
- 零按钮 (
zero-button
) 占据两列宽度,并且左对齐。
- 功能按钮 (
light-gray-button
):
AC
: 清除所有输入和状态,重置显示为0
。±
: 切换当前输入的正负号。%
: 计算当前输入的百分比值。
- 运算符按钮 (
orange-button
):
- 包括加法
+
, 减法-
, 乘法×
, 除法÷
, 和等于=
按钮。 - 点击时设置当前操作符并准备进行计算。
=
按钮用于执行最终的计算并将结果显示在屏幕上。
设计特点
- 整体布局:
- 使用 Flexbox 将计算器居中放置在页面上。
- 背景颜色为浅色 (
#f7f7f7
),以突出计算器本身。
- 计算器外观:
- 黑色背景 (
#1d1d26
) 并带有圆角 (border-radius: 40px
)。 - 添加阴影效果 (
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3)
) 增强立体感。
- 显示屏样式:
- 白色字体 (
color: white
) 和较大的字号 (font-size: 40px
)。 - 居右对齐文本,底部有一条细线分隔 (
border-bottom: 1px solid #333
)。
- 按钮样式:
- 数字按钮使用灰色背景 (
background-color: #333
) 和白色文字 (color: white
)。 - 功能按钮使用浅灰色背景 (
background-color: #666
) 和黑色文字 (color: black
)。 - 运算符按钮使用浅橙色背景 (
background-color: #ff9500
)。 - 所有按钮在悬停时背景颜色加深 (
transition: background-color 0.3s
)。
- 零按钮设计:
- 占据两列宽度 (
grid-column: span 2
)。 - 左对齐并且有一个较大的圆角 (
border-top-left-radius: 20px
)。
通过这些设计和功能实现,你可以获得一个直观且易于使用的iPhone风格计算器体验。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>iPhone Style Calculator</title> <style> body { display: flex; justify-content: center; align-items: center; height: 100vh; background-color: #f7f7f7; margin: 0; } .calculator { width: 350px; background-color: #1d1d26; border-radius: 40px; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3); overflow: hidden; font-family: 'Helvetica Neue', Arial, sans-serif; } .display { height: 120px; background-color: #1e1e2a; color: white; text-align: right; padding-right: 20px; line-height: 120px; font-size: 40px; border-bottom: 1px solid #333; } .buttons { display: grid; grid-template-columns: repeat(4, 1fr); } button { height: 70px; font-size: 24px; border: none; outline: none; cursor: pointer; transition: background-color 0.3s; } button:hover { background-color: #333; } .gray-button { background-color: #333; color: white; } .light-gray-button { background-color: #666; color: black; } .orange-button { background-color: #ff9500; color: white; } .zero-button { grid-column: span 2; border-top-left-radius: 20px; } </style> </head> <body> <div class="calculator"> <div class="display" id="display">0</div> <div class="buttons"> <button class="light-gray-button" onclick="clearDisplay()">AC</button> <button class="light-gray-button" onclick="toggleSign()">±</button> <button class="light-gray-button" onclick="calculatePercentage()">%</button> <button class="orange-button" onclick="appendOperator('÷')">÷</button> <button class="gray-button" onclick="appendNumber('7')">7</button> <button class="gray-button" onclick="appendNumber('8')">8</button> <button class="gray-button" onclick="appendNumber('9')">9</button> <button class="orange-button" onclick="appendOperator('×')">×</button> <button class="gray-button" onclick="appendNumber('4')">4</button> <button class="gray-button" onclick="appendNumber('5')">5</button> <button class="gray-button" onclick="appendNumber('6')">6</button> <button class="orange-button" onclick="appendOperator('-')">−</button> <button class="gray-button" onclick="appendNumber('1')">1</button> <button class="gray-button" onclick="appendNumber('2')">2</button> <button class="gray-button" onclick="appendNumber('3')">3</button> <button class="orange-button" onclick="appendOperator('+')">+</button> <button class="gray-button zero-button" onclick="appendNumber('0')">0</button> <button class="gray-button" onclick="appendDecimal('.')">.</button> <button class="orange-button" onclick="calculateResult()">=</button> </div> </div> <script> let currentInput = ''; let operator = null; let previousInput = ''; function clearDisplay() { currentInput = ''; operator = null; previousInput = ''; updateDisplay(); } function toggleSign() { currentInput = currentInput.charAt(0) === '-' ? currentInput.slice(1) : '-' + currentInput; updateDisplay(); } function calculatePercentage() { if (currentInput !== '') { currentInput = (parseFloat(currentInput) / 100).toString(); updateDisplay(); } } function appendNumber(number) { if (number === '.' && currentInput.includes('.')) return; currentInput += number; updateDisplay(); } function appendDecimal(dot) { if (!currentInput.includes(dot)) { currentInput += dot; } updateDisplay(); } function appendOperator(op) { if (currentInput === '' && previousInput === '') return; if (previousInput !== '') { calculateResult(); } operator = op; previousInput = currentInput; currentInput = ''; } function calculateResult() { let result; const prev = parseFloat(previousInput); const current = parseFloat(currentInput); if (isNaN(prev) || isNaN(current)) return; switch (operator) { case '+': result = prev + current; break; case '-': result = prev - current; break; case '×': result = prev * current; break; case '÷': result = prev / current; break; default: return; } currentInput = result.toString(); operator = null; previousInput = ''; updateDisplay(); } function updateDisplay() { document.getElementById('display').innerText = currentInput || '0'; } </script> </body> </html>
No responses yet