Создаем таймер обратного отсчета на JS и HTML без CSS

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

HTML
Скопировать код
<p id="countdown">10</p> <!-- Отобразится обратный отсчёт -->
<script>
let time = 10; // Задаём начальное время
const timer = setInterval(() => {
  document.getElementById('countdown').textContent = time <= 0 
    ? clearInterval(timer) // Останавливаем таймер, поскольку время истекло
    : time--; // С каждой секундой уменьшаем время
}, 1000); // Интервал делаем одной секунды
</script>

Этот код с использованием чистого HTML и JavaScript позволит вам добавить на ваш сайт 10-секундный обратный таймер. Функция setInterval регулярно обновляет число, отображаемое в элементе <p>, и останавливается, когда таймер достигает нуля.

Кинга Идем в IT: пошаговый план для смены профессии

Тиканье таймера: разбираем setInterval

Ключевой блок кода здесь — это функция setInterval(). Она вызывает указанную callback-функцию каждые 1000 миллисекунд, что обеспечивает нам отсчёт времени с равномерным интервалом.

Подробнее:

  1. Переменная time уменьшается на единицу, пока значение не станет равным нулю.
  2. Для обновления содержимого на странице используется document.getElementById().
  3. Если time равно нулю, то clearInterval() останавливает таймер.

Заданный интервал в 1000 миллисекунд позволяет отсчитывать время по секундам и всё, что необходимо для работы – это JavaScript и HTML.

Отличительные особенности таймера

Добавляем сообщение после окончания отсчёта

Для добавления информации после окончания отсчёта, внесём незначительные изменения в код:

HTML
Скопировать код
<p id="countdown">Загрузка начнётся через 10 секунд.</p> <!-- Отсчёт уже идёт -->
<script>
let time = 10; // Задаём время обратного отсчёта
const timer = setInterval(() => {
  const countdownElement = document.getElementById('countdown'); // Последим за элементом отсчёта
  if(time > 0) {
    countdownElement.textContent = `Загрузка начнётся через ${time--} секунд.`;
  } else {
    clearInterval(timer); // Заканчиваем работу таймера
    countdownElement.textContent = 'Идёт загрузка...'; // Сообщение о старте загрузки
  }
}, 1000);
</script>

Обратный отсчёт с визуальным заполнением

Альтернативный вариант может представлять собой обратный отсчёт с визуальным индикатором:

HTML
Скопировать код
<progress id="countdown" value="10" max="10"></progress> <!-- Прогресс заполнения -->
<script>
let time = 10; // Начинаем с 10
const timer = setInterval(() => {
  const countdownElement = document.getElementById('countdown'); // Наблюдаем за полосой прогресса
  if(time >= 0) {
    countdownElement.value = time--; // Заполняем полосу прогресса
  } else {
    clearInterval(timer); // Полностью останавливаем таймер
    countdownElement.textContent = 'Отсчёт завершён!'; // Сообщение о завершении
  }
}, 1000);
</script>

Использование элемента <progress> добавляет визуальный аспект к нашему таймеру, исключая необходимость ручной стилизации.

Визуализация

Представьте себе этот 10-секундный таймер как тикающие часы:

Markdown
Скопировать код
🕝...🕒...🕞...🕓...🕟...🕔...🕠...🕕...🕡...🕖... 🚀 Стартуем!

Каждый тик здесь вызывает удар барабана в марше обратного отсчёта:

HTML
Скопировать код
<!-- Отсчёт времени -->
<p id="timer">10</p>
<script>
// Время исчисляется секундами
setInterval(function() {
  if(countdown > 0) {
    document.getElementById('timer').textContent = --countdown;
    // Каждый тик уменьшает время
  }
}, 1000); // Отсчёт продолжается непрерывно
</script>

Мы готовы к старту когда время отсчёта подойдёт к нулю!

Дополнительные возможности обратного отсчёта

Запуск по клику пользователя

Возможность взаимодействия пользователя, например, клик по кнопке, делает процесс запуска отсчёта более интерактивным:

HTML
Скопировать код
<button id="startBtn">Запустить загрузку</button> 
<p id="countdown">Готовы к старту!</p>
<script>
document.getElementById('startBtn').onclick = function() {
  let time = 10; // Начало отсчёта
  document.getElementById('countdown').textContent = 'Начало через 10 секунд.';
  const timer = setInterval(() => {
    const countdownElement = document.getElementById('countdown');
    if(time > 0) {
      countdownElement.textContent = `Начало через ${time--} секунд.`;
    } else {
      clearInterval(timer); // Остановка ожидания
      countdownElement.textContent = 'Началась загрузка!'; // Сообщаем пользователю об этом
    }
  }, 1000);
};
</script>

Многократные таймеры с настраиваемыми элементами

Настраиваемые элементы дают возможность использовать таймер для различных задач в интернете:

HTML
Скопировать код
<download-timer></download-timer>
<script>
class DownloadTimer extends HTMLElement {
  connectedCallback() {
    this.innerHTML = `<p id="countdown">10</p>`;
    this.startCountdown();
  }

  startCountdown() {
    let time = 10; // Стартуем отсчёт
    const timer = setInterval(() => {
      this.querySelector('#countdown').textContent = time--; // Время уменьшается
      if(time < 0) {
        clearInterval(timer); // Остановка обязательна
        this.textContent = 'Загрузка завершена!'; // Сообщаем о готовности
      }
    }, 1000);
  }
}

customElements.define('download-timer', DownloadTimer); // Регистрируем новый элемент 'download-timer'
</script>

Этот подход на основе компонентов включает логику обратного отсчёта в настраиваемый HTML-элемент. Таким образом, мы достигаем переиспользования кода и упрощения поддержки.

Полезные материалы

  1. JavaScript Timing Events — Изучите все различные способы работы с таймерами в JavaScript.
  2. setInterval() global function – Web APIs | MDN — Исчерпывающий ресурс с информацией о использовании setInterval для установления интервалов и таймеров.
  3. How to write a countdown timer in JavaScript? – Stack Overflow — Получите советы и рекомендации от коллег-программистов, научитесь на практических примерах и ошибках.
  4. Build a Countdown Timer in Just 18 Lines of JavaScript — SitePoint — Самый простой способ создать обратный отсчёт с помощью чистого JavaScript.
  5. The progress element | HTML5 Doctor — Руководство по использованию элемента <progress> в HTML5.
  6. onclick Event — Знакомство с использованием событий onclick для вызова функций JavaScript.
  7. Using custom elements – Web APIs | MDN — Узнайте, как создавать и использовать настроиваемые элементы при веб-разработке.