У меня есть миссия практиковать JavaScript как можно больше, выполняя различные проекты. Я выбрал этот проект, потому что он относительно прост и понятен. Я уже знаком с вычислениями в JavaScript. Чтобы создать проект калькулятора подсказок JavaScript, мне просто нужно было научиться добавлять эти вычисления к существующему элементу html.
Живой пример кода: https://dmarcisovska.github.io/javascript-tip-calculator/
Код Github: https://github.com/dmarcisovska/javascript-tip-calculator
Процесс мозгового штурма
Прежде чем приступить к делу, я сел и подумал о шагах, необходимых для реализации калькулятора чаевых на JavaScript.
Шаги
- Пользователь вводит сумму счета в долларах
- Пользователь выбирает процентную сумму из раскрывающегося списка
- Функция калькулятора чаевых JavaScript умножает сумму счета на процент чаевых для расчета суммы чаевых
- Калькулятор чаевых JavaScript добавляет сумму вашего счета к сумме чаевых, рассчитанной на предыдущем шаге.
- Калькулятор чаевых JavaScript возвращает сумму вашего счета, сумму чаевых и общий счет конечному пользователю и добавляет его в html.
Я определил, что пользователю нужно будет ввести сумму счета в долларах. Затем я бы попросил их выбрать процент из раскрывающегося списка, чтобы мне было проще. Я бы также создал функцию калькулятора чаевых в JavaScript, которая будет получать сумму счета, процент чаевых, умножать их, чтобы получить сумму чаевых, и добавлять сумму чаевых к счету, чтобы получить общую сумму.
HTML
Первый шаг — это HTML. Я использую стартовый шаблон Bootstrap. Я создал форму для сбора информации о счете и сумме чаевых. Я убедился, что типом ввода является число, чтобы пользователь не мог добавлять нечисловые символы в поле, и это избавило бы меня от необходимости проверять данные. Чтобы еще больше избежать проверки данных, я установил минимальное входное значение на 0. Я также установил начальное значение на 100,00.
Я создал раздел, в котором отображается сумма счета, сумма причитающихся чаевых и общий счет, который должен быть выплачен. Этот раздел скрыт через CSS и позже будет отображаться через JavaScript.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JavaScript Tip Calculator</title> <link href='https://fonts.googleapis.com/css?family=Lato:300' rel='stylesheet' type='text/css'> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <link href="https://fonts.googleapis.com/css2?family=Dancing+Script:wght@700&display=swap" rel="stylesheet"> <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> <link href="styles.css" rel="stylesheet"> </head> <body> <div class="container-fluid"> <div class="overlay"> <h1>Tip Calculator</h1> <hr class="white"> <p>Use the form below to calculate your tip. </p> <div class="card mb-4" id="bill-card"> <div class="card-body"> <div class="d-flex justify-content-between mb-2"> <div> Bill </div> <div id="bill"> <p id="bill-p"> </p> </div> </div> <div class="d-flex justify-content-between"> <div> Tip </div> <div id="tip"> <p id="tip-p"> </p> </div> </div> <hr> <div class="d-flex justify-content-between"> <div> Total </div> <div id="total"> <p id="total-p"> </p> </div> </div> </div> </div> <div class="card mb-4"> <div class="card-body"> <div class="form-row"> <label class="mb-sm-2 mt-3" for="billInput">Bill Amount</label> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">$</span> </div> <input type="number" class="form-control" id="billInput" placeholder="" min="00.00" value="100.00" step="0.010"> </div> </div> <div class="form-row"> <label class="mb-sm-2 mt-3" for="tipForm">Tip Amount</label> <select class="form-control" id="tipForm"> <option value=".05">5% </option> <option value=".1">10% </option> <option selected value=".15">15% </option> <option value=".2">20% </option> <option value=".25">25% </option> </select> </div> </div> </div> <button type="button" class="btn btn-outline-light btn-lg btn-block" onclick="calcTip()">Calculate Tip Total</button> </div> </div> <script src="scripts.js"></script> </body> </html>
CSS
Теперь давайте стилизуем калькулятор чаевых JavaScript. Я нашел классное фоновое изображение кафе, чтобы добавить его в калькулятор чаевых на javascript. Я также подумал, что было бы здорово добавить размытый прозрачный фон в области, где отображается вся информация. Затем я стилизовал шрифт и разделитель hr в CSS.
html, body, .container-fluid { width: 100%; height: 100%; } .white{ width: 50px; height: .5em; border: 0; border-top: 1px solid #ffffff; } .container-fluid, .overlay:before { background: url(https://cdn.pixabay.com/photo/2018/07/14/15/27/cafe-3537801_1280.jpg) no-repeat fixed 0 0 / cover; } .card { color: gray; } .container-fluid { align-items: center; display: flex; justify-content: center; } .overlay { margin: 0 auto; max-width: 768px; overflow: hidden; padding: 50px; position: relative; color: white; font-family: 'Lato', sans-serif; text-align: center; z-index: 0; } .overlay:before { content: ''; filter: blur(20px); height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: -1; } #bill-card { display: none; }
JavaScript
Я создал функцию калькулятора чаевых в JavaScript, которая называется calcTip. В функции я беру значение суммы чаевых. Я также беру входное значение суммы счета и устанавливаю их как переменные, чтобы их можно было легко использовать позже. Затем я нахожу элемент платежной карты и устанавливаю его как переменную, которая позже будет использоваться для отображения скрытого в данный момент элемента платежной карты.
Следующим шагом является преобразование значения суммы чаевых и значения суммы счета в числа из строк, чтобы я мог вычислить математику для обоих из них (все пойдет не так, как ожидалось, если вы добавите строки вместе).
Затем я беру html-элементы, которые в настоящее время пусты, и в них будут содержаться расчетный счет, чаевые и общая сумма.
Далее расчеты. Я вычисляю общую сумму счета, умножая сумму чаевых на сумму счета. Я рассчитываю общий счет, добавляя общую сумму чаевых к счету.
Затем я добавляю чаевые, счет и общую стоимость к пустым элементам, упомянутым в абзаце выше последнего. Я использовал .toFixed(2) для значений, чтобы они отображались в долларах.
Наконец, я сделал видимым элемент карты счета, чтобы теперь вы могли видеть карту, на которой показана сумма задолженности.
function calcTip(){ // grab the input values let tipAmount= document.getElementById("tipForm").value; let billAmount = document.getElementById("billInput").value; let billCard = document.getElementById("bill-card"); //turn strings into numbers let tipAmountNumber = parseFloat(tipAmount); let billAmountNumber = parseFloat(billAmount); //grab elements let bill = document.getElementById('bill-p'); let tip = document.getElementById('tip-p'); let total = document.getElementById('total-p'); // calculations let totalAmount = (tipAmountNumber * billAmountNumber); let totalBill = totalAmount + billAmountNumber; //append content tip.innerHTML = "$" + (totalAmount).toFixed(2); bill.innerHTML = "$" + billAmountNumber.toFixed(2); total.innerHTML = "$" + totalBill.toFixed(2); // show the bill info billCard.style.display = "block"; }
Первоначально опубликовано на https://denisa.dev 23 апреля 2020 г.