Создание простого слайдера изображений

Тренажер по работе с HTML DOM на JavaScript для пользователей с начальным и средним уровнем подготовки.

Тренажер JavaScript: Покоряем HTML DOM

В этом уроке вы пройдете путь от создания статической HTML-структуры слайдера до добавления динамического поведения с помощью JavaScript. Вы узнаете, как выбирать элементы DOM, изменять их свойства, обрабатывать события кликов для переключения изображений и создавать базовый функционал слайдера. Каждое задание направлено на постепенное усложнение и закрепление полученных знаний на практике.

Список тем

Скрытие изображений и отображение первого

Используйте JavaScript, чтобы скрыть все изображения слайдера, кроме первого. При загрузке страницы должен быть виден только первый слайд.

CSS
.slider-container {
  display: flex;
  overflow: hidden;
  width: 300px;
}

.slider-image {
  width: 300px;
  height: auto;
}

.hidden {
  display: none !important;
}
HTML
Восстановить HTML
<div class="slider-container">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image 1" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png" alt="Image 2" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike3-300x300.png" alt="Image 3" class="slider-image">
</div>
JavaScript
const images = document.input__1(".slider-image");
for (let i = 1; i < images.length; i++) {
  images[i].classList.add(input__2);
}
images[0].classList.remove(input__2);
Вам нужно получить коллекцию всех изображений слайдера. Затем, используя цикл, скройте все изображения, установив свойство `display` в значение `none`. После этого, сделайте первое изображение видимым, установив свойство `display` в значение `block` или `inline-block`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Кнопка "Следующий слайд"

Добавьте кнопку "Next" и JavaScript код, чтобы при нажатии на нее отображалось следующее изображение в слайдере.

CSS
.slider-container {
  display: flex;
  overflow: hidden;
  width: 300px;
}

.slider-image {
  width: 300px;
  height: auto;
}

.hidden {
  display: none !important;
}

.slider-button {
  margin-top: 10px;
  cursor: pointer;
}
HTML
Восстановить HTML
<div class="slider-container">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image 1" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png" alt="Image 2" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike3-300x300.png" alt="Image 3" class="slider-image">
</div>
<button id="nextButton" class="slider-button">Next</button>
JavaScript
const images = document.querySelectorAll(".slider-image");
const nextButton = document.input__1("nextButton");
let currentIndex = 0;

for (let i = 1; i < images.length; i++) {
  images[i].classList.add("hidden");
}

nextButton.addEventListener("click", () => {
  images[currentIndex].classList.add("hidden");
  currentIndex input__2;
  if (currentIndex >= images.length) {
    currentIndex = 0;
  }
  images[currentIndex].classList.remove("hidden");
});
Сначала добавьте HTML кнопку с текстом "Next" после контейнера слайдера. Затем в JavaScript получите доступ к кнопке и всем изображениям. Создайте переменную для отслеживания текущего индекса слайда (начните с 0). При клике на кнопку "Next" увеличьте индекс на 1 и отобразите изображение с этим индексом, скрывая предыдущее.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Кнопка "Предыдущий слайд"

Добавьте кнопку "Previous" и JavaScript код для отображения предыдущего изображения при нажатии.

CSS
.slider-container {
  display: flex;
  overflow: hidden;
  width: 300px;
}

.slider-image {
  width: 300px;
  height: auto;
}

.hidden {
  display: none !important;
}

.slider-button {
  margin-top: 10px;
  cursor: pointer;
  margin-right: 10px;
}
HTML
Восстановить HTML
<div class="slider-container">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image 1" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png" alt="Image 2" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike3-300x300.png" alt="Image 3" class="slider-image">
</div>
<button id="prevButton" class="slider-button">Previous</button>
<button id="nextButton" class="slider-button">Next</button>
JavaScript
const images = document.querySelectorAll(".slider-image");
const prevButton = document.input__1("prevButton");
const nextButton = document.getElementById("nextButton");
let currentIndex = 0;

for (let i = 1; i < images.length; i++) {
  images[i].classList.add("hidden");
}

nextButton.addEventListener("click", () => {
  images[currentIndex].classList.add("hidden");
  currentIndex++;
  if (currentIndex >= images.length) {
    currentIndex = 0;
  }
  images[currentIndex].classList.remove("hidden");
});

prevButton.addEventListener("click", () => {
  images[currentIndex].classList.add("hidden");
  currentIndex input__2;
  if (currentIndex < 0) {
    currentIndex = images.length - 1;
  }
  images[currentIndex].classList.remove("hidden");
});
Аналогично кнопке "Next", добавьте HTML кнопку "Previous". В JavaScript, при клике на кнопку "Previous", уменьшите индекс текущего слайда на 1 и отобразите соответствующее изображение. Обработайте случай, когда индекс становится меньше 0, чтобы он переходил к последнему слайду.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Автоматическая смена слайдов

Реализуйте автоматическую смену слайдов через определенный интервал времени, например, каждые 3 секунды.

CSS
.slider-container {
  display: flex;
  overflow: hidden;
  width: 300px;
}

.slider-image {
  width: 300px;
  height: auto;
}

.hidden {
  display: none !important;
}

.slider-button {
  margin-top: 10px;
  cursor: pointer;
  margin-right: 10px;
}
HTML
Восстановить HTML
<div class="slider-container">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image 1" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png" alt="Image 2" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike3-300x300.png" alt="Image 3" class="slider-image">
</div>
<button id="prevButton" class="slider-button">Previous</button>
<button id="nextButton" class="slider-button">Next</button>
JavaScript
const images = document.querySelectorAll(".slider-image");
let currentIndex = 0;

for (let i = 1; i < images.length; i++) {
  images[i].classList.add("hidden");
}

function nextSlide() {
  images[currentIndex].classList.add("hidden");
  currentIndex++;
  if (currentIndex >= images.length) {
    currentIndex = 0;
  }
  images[currentIndex].classList.remove("hidden");
}

setInterval(input__1, input__2);
Используйте функцию `setInterval` для вызова функции, которая будет переключать слайды каждые 3000 миллисекунд. Функция переключения слайдов может быть аналогична той, что используется для кнопки "Next".
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Пауза при наведении мыши

Остановите автоматическую смену слайдов, когда курсор мыши находится над слайдером, и возобновите, когда курсор уходит.

CSS
.slider-container {
  display: flex;
  overflow: hidden;
  width: 300px;
}

.slider-image {
  width: 300px;
  height: auto;
}

.hidden {
  display: none !important;
}

.slider-button {
  margin-top: 10px;
  cursor: pointer;
  margin-right: 10px;
}
HTML
Восстановить HTML
<div class="slider-container">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image 1" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png" alt="Image 2" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike3-300x300.png" alt="Image 3" class="slider-image">
</div>
<button id="prevButton" class="slider-button">Previous</button>
<button id="nextButton" class="slider-button">Next</button>
JavaScript
const sliderContainer = document.input__1(".slider-container");
const images = document.querySelectorAll(".slider-image");
let currentIndex = 0;
let intervalId;

for (let i = 1; i < images.length; i++) {
  images[i].classList.add("hidden");
}

function nextSlide() {
  images[currentIndex].classList.add("hidden");
  currentIndex++;
  if (currentIndex >= images.length) {
    currentIndex = 0;
  }
  images[currentIndex].classList.remove("hidden");
}

function startSlider() {
  intervalId = setInterval(nextSlide, 3000);
}

function stopSlider() {
  clearInterval(input__2);
}

startSlider();

sliderContainer.addEventListener("mouseover", stopSlider);
sliderContainer.addEventListener("mouseout", startSlider);
Используйте события `mouseover` и `mouseout` для контейнера слайдера. При `mouseover` используйте `clearInterval` для остановки автоматической смены. При `mouseout` снова запустите `setInterval`.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку

Индикаторы слайдов

Добавьте индикаторы (точки) под слайдером, чтобы показывать текущий слайд. Количество индикаторов должно соответствовать количеству изображений.

CSS
.slider-container {
  display: flex;
  overflow: hidden;
  width: 300px;
}

.slider-image {
  width: 300px;
  height: auto;
}

.hidden {
  display: none !important;
}

.slider-button {
  margin-top: 10px;
  cursor: pointer;
  margin-right: 10px;
}

.slider-indicators {
  display: flex;
  justify-content: center;
  margin-top: 10px;
}

.indicator {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background-color: #bbb;
  margin: 0 5px;
  cursor: pointer;
}

.indicator.active {
  background-color: #555;
}
HTML
Восстановить HTML
<div class="slider-container">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike2-300x300.png" alt="Image 1" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike-300x300.png" alt="Image 2" class="slider-image">
  <img src="https://naytikurs.ru/assets/uploads/2025/03/3d-modelirovanie-i-vizualizatsiya-test-dlya-spetsialistov-v-trehmernoj-grafike3-300x300.png" alt="Image 3" class="slider-image">
</div>
<div class="slider-indicators"></div>
<button id="prevButton" class="slider-button">Previous</button>
<button id="nextButton" class="slider-button">Next</button>
JavaScript
const sliderContainer = document.querySelector(".slider-container");
const images = document.querySelectorAll(".slider-image");
const prevButton = document.getElementById("prevButton");
const nextButton = document.getElementById("nextButton");
const indicatorsContainer = document.input__1(".slider-indicators");
let currentIndex = 0;
let intervalId;

for (let i = 1; i < images.length; i++) {
  images[i].classList.add("hidden");
}

// Создание индикаторов
for (let i = 0; i < images.length; i++) {
  const indicator = document.createElement("span");
  indicator.classList.add("indicator");
  indicatorsContainer.appendChild(indicator);
}
const indicators = document.querySelectorAll(".indicator");
indicators[0].classList.add("active"); // Первый индикатор активен изначально

function updateIndicators() {
  indicators.forEach((indicator) => indicator.classList.remove("active"));
  indicators[currentIndex].classList.add("active");
}

function nextSlide() {
  images[currentIndex].classList.add("hidden");
  currentIndex++;
  if (currentIndex >= images.length) {
    currentIndex = 0;
  }
  images[currentIndex].classList.remove("hidden");
  input__2(); // Обновление индикаторов
}

function prevSlide() {
  images[currentIndex].classList.add("hidden");
  currentIndex--;
  if (currentIndex < 0) {
    currentIndex = images.length - 1;
  }
  images[currentIndex].classList.remove("hidden");
  updateIndicators(); // Обновление индикаторов
}

function startSlider() {
  intervalId = setInterval(nextSlide, 3000);
}

function stopSlider() {
  clearInterval(intervalId);
}

startSlider();

nextButton.addEventListener("click", () => {
  nextSlide();
  stopSlider(); startSlider(); // Перезапуск автоматической смены после ручного переключения
});
prevButton.addEventListener("click", () => {
  prevSlide();
  stopSlider(); startSlider(); // Перезапуск автоматической смены после ручного переключения
});
sliderContainer.addEventListener("mouseover", stopSlider);
sliderContainer.addEventListener("mouseout", startSlider);
Создайте `div` с классом `slider-indicators` после контейнера слайдера. В JavaScript, создайте столько элементов `span` с классом `indicator` внутри `slider-indicators`, сколько изображений в слайдере. При переключении слайдов, добавляйте класс `active` к индикатору текущего слайда и удаляйте его с остальных.
Заполнить ответами все поля
Результат
Лог
Выполнить
Отметить решенным
Показать подсказку
НайтиКурс.Ру
Добавить комментарий