织梦CMS - 轻松建站从此开始!

abg欧博官网|登陆|游戏|

Как сделать простой калькулятор на HTML и Javascri

时间:2025-07-17 20:59来源: 作者:admin 点击: 12 次
В отдельной функции для каждой операции, смысла нет - потому что при смене операции в интерфейсе, в алгоритме меняется всего одно действие... и если м

В отдельной функции для каждой операции, смысла нет - потому что при смене операции в интерфейсе, в алгоритме меняется всего одно действие... и если мы разделим логику на 4 функции, то не сможем избежать дублирования кода остальных, общих действий (нарушим принцип DRY).

Решение через switch - в принципе, самое простое (исключая вариант eval()) и распространенное.

"Лапшу" if..else if лучше не использовать: есть негласное правило, ограничивающее использование такой конструкции тремя вариантами - а у нас их четыре. Да, читаемость не сильно пострадает от еще одного else if, но абсолютно незачем "ползать по краю", когда можно написать код чисто.

Пример с использованием современных возможностей JavaScript:

document.addEventListener('DOMContentLoaded', () => { const [inpA, ops, inpB, btnCalc, inpRes] = Array.from(document.querySelectorAll('.calc > *')); for (let op of ops.children) op.addEventListener('click', selectOp); btnCalc.addEventListener('click', calc); function selectOp() { for (let op of this.parentElement.children) op.classList.remove('active'); this.classList.add('active'); } function calc() { let [a, b, result] = [+inpA.value, +inpB.value, 0]; if (!isFinite(a) || !isFinite(b)) return inpRes.value = 'Неверный ввод'; inpA.value = a; inpB.value = b; const selectedOp = document.querySelector('.calc [data-op].active'); switch (selectedOp.dataset.op) { case '+': result = a + b; break; case '-': result = a - b; break; case '∗': result = a * b; break; case '÷': result = a / b; } inpRes.value = result; } }); .calc { display: flex; flex-flow: column nowrap; align-items: stretch; max-width: 300px; font: 18px monospace; } .calc * { font: inherit; outline: none; } .calc > * + * { margin-top: 0.5rem; } .calc div { display: flex; flex-flow: row nowrap; justify-content: space-between; padding: 0 1px; } .calc [data-op] { width: calc(25% - 8px); } .calc [data-op]::before, .calc button { content: attr(data-op); display: inline-block; width: 100%; font-size: 1.4rem; line-height: 1.4rem; text-align: center; border: none; border-radius: 3px; transition: box-shadow 0.15s linear; box-shadow: 0 0 0 1px #ccc; background: #eee; cursor: pointer; } .calc [data-op]:hover::before, .calc button:hover { box-shadow: 0 0 0 1px #7af; } .calc [data-op].active::before { background: #aea; } .calc [readonly] { border: none; text-align: center; } <div> <input type="number"> <div> <span data-op="+"></span> <span data-op="-"></span> <span data-op="∗"></span> <span data-op="÷"></span> </div> <input type="number"> <button>=</button> <input readonly> </div>

(责任编辑:)
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:
发布者资料
查看详细资料 发送留言 加为好友 用户等级: 注册时间:2025-08-23 15:08 最后登录:2025-08-23 15:08
栏目列表
推荐内容