iPhone风格的计算器

为了实现这个iPhone风格的计算器,我们将编写一个完整的HTML页面,其中包含CSS样式和JavaScript逻辑。

以下是关于这个iPhone风格计算器的关键功能和设计的详细介绍:

关键功能

  1. 显示区域 (display):
  • 显示当前输入的数字或计算结果。
  • 初始状态下显示为 0
  1. 数字按钮 (gray-button):
  • 包括数字 0-9 和小数点 . 按钮。
  • 点击时将数字或小数点添加到当前输入中。
  • 零按钮 (zero-button) 占据两列宽度,并且左对齐。
  1. 功能按钮 (light-gray-button):
  • AC: 清除所有输入和状态,重置显示为 0
  • ±: 切换当前输入的正负号。
  • %: 计算当前输入的百分比值。
  1. 运算符按钮 (orange-button):
  • 包括加法 +, 减法 -, 乘法 ×, 除法 ÷, 和等于 = 按钮。
  • 点击时设置当前操作符并准备进行计算。
  • = 按钮用于执行最终的计算并将结果显示在屏幕上。

设计特点

  1. 整体布局:
  • 使用 Flexbox 将计算器居中放置在页面上。
  • 背景颜色为浅色 (#f7f7f7),以突出计算器本身。
  1. 计算器外观:
  • 黑色背景 (#1d1d26) 并带有圆角 (border-radius: 40px)。
  • 添加阴影效果 (box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3)) 增强立体感。
  1. 显示屏样式:
  • 白色字体 (color: white) 和较大的字号 (font-size: 40px)。
  • 居右对齐文本,底部有一条细线分隔 (border-bottom: 1px solid #333)。
  1. 按钮样式:
  • 数字按钮使用灰色背景 (background-color: #333) 和白色文字 (color: white)。
  • 功能按钮使用浅灰色背景 (background-color: #666) 和黑色文字 (color: black)。
  • 运算符按钮使用浅橙色背景 (background-color: #ff9500)。
  • 所有按钮在悬停时背景颜色加深 (transition: background-color 0.3s)。
  1. 零按钮设计:
  • 占据两列宽度 (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

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注