Ванильный код
April 19, 2022
Создаем секундомер на JavaScript
Всем привет 🎉
В этой статье мы узнаем, как мы создать секундомер. Использовать будем нативный HTML, CSS и JavaScript.
Я надеюсь, вам понравится этот простой проект, поэтому давайте начнем с базовой HTML-структуры для секундомера.
<html> <head> <link rel="stylesheet" href="style.css"> <title> Секундомер </title> </head> <body> <script src="logic.js"></script> <div class="windowshell"> <div class="outershell"> <div class="timerscreen" id="timerscreen"> <label>Секундомер</label> <!-- Вывод числовых значений секундомера --> <div> <label class="timer" id="timers">0</label> <label class="timer">секунд</label> <label class="timer milli" id="timerms">000</label> <label class="timer milli">миллисекунд</label> </div> <!-- Кнопки, которые будут контролировать секундомер --> <div class="buttonholder"> <button class="reset c-button" onclick="startTimer()"> Start </button> <button class="reset c-button" onclick="stopTimer()"> Stop </button> <button class="reset c-button" onclick="resetTimer()"> Reset </button> </div> </div> </div> </div> </body> </html>
Так выглядит весь HTML-код для секундомера. Сейчас это выглядит примерно так:
Давайте добавим немного стилей, чтобы он выглядел не на столько ужасно:
* { margin: 0; } body { display: flex; height: 100vh; } .windowshell { background: #f0f0f0; flex-grow: 1; display: flex; align-items: center; justify-content: center; } .outershell { display: flex; flex-direction: column; align-items: center; justify-content: center; border-radius: 50%; width: 400px; height: 400px; background: #fafafa; box-shadow: 40px 40px 40px #cccccc, 0 0 0 #ffffff, 0 0 0 #cccccc inset, 2px 2px 2px #ffffff inset; } .c-button { min-width: 100px; font-family: inherit; appearance: none; border: 0; border-radius: 5px; background: #4676d7; color: #fff; padding: 8px 16px; font-size: 1rem; cursor: pointer; } .c-button:hover { background: #1d49aa; } .c-button:active { background: #4676d7; } .c-button:focus { outline: none; box-shadow: 0 0 0 4px #cbd6ee; } .milli { font-size: large; } .timerscreen { display: flex; flex-direction: column; align-items: center; } .timer { padding: 10px; } label { font-variant: small-caps; font-family: fantasy; font-size: xx-large; }
Ну и немного оживим наш секундомер при помощи JS:
let intervalVariable = undefined; let timeleft = 0; let totaltime = 0; const startTimer = () => { // Создаем интервал, который будет считать нам время intervalVariable = setInterval(updateTime, 10); } const resetTimer = () => { // Останавливаем таймер stopTimer(); timeleft = -10; // Обновляем значение в ui updateTime(); } const stopTimer = () => { // Производим очистку интервала clearInterval(intervalVariable); } const updateTime = () => { // Шаг 10 миллисекунд timeleft = timeleft + 10; // Получаем нужные нам элементы const timers = document.getElementById("timers"); const timerms = document.getElementById("timerms"); const milli = timeleft % 1000; // Устанавливаем значения timers.innerHTML = Math.floor(timeleft / 1000); timerms.innerHTML = Math.floor(milli / 10); timers.style.color = "green"; timerms.style.color = "red"; }
И в итоге получаем что-то такое:
Ловите песочницу:
На этом сегодняшний мини проект ванильного кода окончен, я понимаю что информативности тут для профи нет никакой, но вот новичкам - явно будет полезно написать что-то до ужаса простое и понятное!