超级计算机edit icon

Fork(复制)
下载
嵌入
设置
BUG反馈
index.html
现在支持上传本地图片了!
            
            <!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>CyberCalc Pro</title>
    <style>
        :root {
            --neon-blue: #00f3ff;
            --neon-purple: #bc13fe;
            --dark-bg: #0a0a0f;
        }

        body {
            margin: 0;
            background: var(--dark-bg);
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            font-family: 'Consolas', monospace;
            color: var(--neon-blue);
        }

        .calculator {
            background: linear-gradient(145deg, #111122, #000011);
            padding: 2rem;
            border-radius: 15px;
            border: 2px solid var(--neon-blue);
            box-shadow: 0 0 30px var(--neon-blue);
            width: 800px;
        }

        #display {
            background: rgba(0, 20, 30, 0.9);
            padding: 1.5rem;
            margin-bottom: 1.5rem;
            border-radius: 8px;
            font-size: 2.5em;
            text-align: right;
            border: 1px solid var(--neon-purple);
            text-shadow: 0 0 10px var(--neon-blue);
            white-space: nowrap;
            overflow-x: auto;
        }

        .grid {
            display: grid;
            grid-template-columns: repeat(8, 1fr);
            gap: 0.8rem;
        }

        button {
            padding: 1.2em 0.5em;
            background: rgba(0, 50, 80, 0.3);
            border: 1px solid var(--neon-blue);
            color: var(--neon-blue);
            border-radius: 5px;
            font-size: 1.2em;
            cursor: pointer;
            transition: all 0.2s;
            position: relative;
            overflow: hidden;
        }

        button:hover {
            background: rgba(0, 100, 150, 0.4);
            box-shadow: 0 0 15px var(--neon-blue);
            transform: scale(1.05);
        }

        button::before {
            content: '';
            position: absolute;
            top: -50%;
            left: -50%;
            width: 200%;
            height: 200%;
            background: linear-gradient(45deg, 
                transparent, 
                var(--neon-blue),
                transparent);
            transform: rotate(45deg);
            opacity: 0.3;
        }

        .operator {
            color: var(--neon-purple);
            border-color: var(--neon-purple);
        }

        #errorMsg {
            color: #ff0033;
            text-align: center;
            min-height: 1.5em;
            margin-top: 1rem;
            text-shadow: 0 0 10px #ff0033;
        }
    </style>
</head>
<body>

<body>
    <div class="calculator">
        <div id="display">0</div>
        <div class="grid">
            <!-- 第一行运算符号 -->
            <button class="operator" onclick="clearDisplay()">C</button>
            <button class="operator" onclick="addToDisplay('(')">(</button>
            <button class="operator" onclick="addToDisplay(')')">)</button>
            <button class="operator" onclick="addOperation('^')">x^y</button>
            <button class="operator" onclick="addOperation('√')">√</button>
            <button class="operator" onclick="addOperation('!')">n!</button>
            <button class="operator" onclick="addOperation('%')">%</button>
            <button class="operator" onclick="addOperation('π')">π</button>

            <!-- 第二行运算符号 -->
            <button onclick="addOperation('sin(')">sin</button>
            <button onclick="addOperation('cos(')">cos</button>
            <button onclick="addOperation('tan(')">tan</button>
            <button onclick="addOperation('log(')">log</button>
            <button onclick="addOperation('ln(')">ln</button>
            <button onclick="addOperation('e')">e</button>
            <button class="operator" onclick="addOperation('/')">÷</button>
            <button class="operator" onclick="addOperation('*')">×</button>

            <!-- 第三行:添加7-8-9 -->
            <button onclick="addNumber(7)">7</button>
            <button onclick="addNumber(8)">8</button>
            <button onclick="addNumber(9)">9</button>
            <button onclick="addOperation('Math.PI')">π</button>
            <button onclick="addOperation('Math.E')">e</button>
            <button class="operator" onclick="addOperation('-')">-</button>
            <button class="operator" onclick="addOperation('+')">+</button>
            <button class="operator" onclick="calculate()">=</button>

            <!-- 第四行:4-5-6 -->
            <button onclick="addNumber(4)">4</button>
            <button onclick="addNumber(5)">5</button>
            <button onclick="addNumber(6)">6</button>
            <button onclick="addOperation('.')">.</button>
            <button onclick="addOperation('1/')">1/x</button>
            <button onclick="addOperation('²')">x²</button>
            <button onclick="addOperation('³')">x³</button>
            <button class="operator" onclick="backspace()">⌫</button>

            <!-- 第五行:1-2-3 -->
            <button onclick="addNumber(1)">1</button>
            <button onclick="addNumber(2)">2</button>
            <button onclick="addNumber(3)">3</button>
            <button onclick="addNumber(0)">0</button>
            <button onclick="addOperation('10^')">10^x</button>
            <button onclick="addOperation('²√')">²√</button>
            <button onclick="addOperation('³√')">³√</button>
            <button onclick="addOperation('mod')">mod</button>
        </div>
        <div id="errorMsg"></div>
    </div>

    <script>
        
        function addNumber(num) {
            if (display.textContent === '0' && num !== 0) {
                display.textContent = '';
            }
            display.textContent += num;
            updateBracketStatus();
        }
    </script>
</body>
</html>
        <div id="errorMsg">
          
        </div>

    <script>
        let openBrackets = 0;
        const display = document.getElementById('display');
        
        // 智能括号补全系统
        function autoCompleteBrackets() {
            const current = display.textContent;
            const lastChar = current.slice(-1);
            
            if (lastChar === '(') {
                openBrackets++;
                return ')';
            }
            return '';
        }

        function updateBracketStatus() {
            const expr = display.textContent;
            openBrackets = (expr.match(/\(/g) || []).length - (expr.match(/\)/g) || []).length;
        }

        function addNumber(num) {
            if (display.textContent === '0') display.textContent = '';
            display.textContent += num;
            updateBracketStatus();
        }

        function addOperation(op) {
            let appendValue = op;
            
            
            const lastChar = display.textContent.slice(-1);
            const operators = ['+', '-', '*', '/', '^'];
            
            if (operators.includes(lastChar) && operators.includes(op)) {
                display.textContent = display.textContent.slice(0, -1);
            }
            
            
            if (op.endsWith('(')) {
                openBrackets++;
                appendValue += ')';
            }
            
            display.textContent += appendValue;
            updateBracketStatus();
        }

        function calculate() {
            try {
                let expr = display.textContent
                    .replace(/×/g, '*')
                    .replace(/÷/g, '/')
                    .replace(/²/g, '**2')
                    .replace(/³/g, '**3')
                    .replace(/√(\d+)/g, 'Math.sqrt($1)')
                    .replace(/(\d+)!/g, function fact(n) {
                        return Array.from({length: n}, (_,i) => i+1).reduce((a,b) => a*b, 1);
                    })
                    .replace(/(sin|cos|tan|log|ln)\(/g, 'Math.$1(')
                    .replace(/\^/g, '**');

                // 补全剩余括号
                expr += ')'.repeat(openBrackets);
                openBrackets = 0;

                const result = eval(expr);
                display.textContent = Number.isInteger(result) ? result : result.toFixed(6);
                document.getElementById('errorMsg').textContent = '';
            } catch (error) {
                document.getElementById('errorMsg').textContent = 'Expression Error';
                setTimeout(() => {
                    document.getElementById('errorMsg').textContent = '';
                }, 2000);
            }
        }

        function clearDisplay() {
            display.textContent = '0';
            openBrackets = 0;
        }

        function backspace() {
            const lastChar = display.textContent.slice(-1);
            if (lastChar === '(') openBrackets--;
            if (lastChar === ')') openBrackets++;
            display.textContent = display.textContent.slice(0, -1) || '0';
        }
    </script>
</body>
</html>
        
预览
控制台