
В этом уроке вы пройдете путь от создания статической HTML-структуры слайдера до добавления динамического поведения с помощью JavaScript. Вы узнаете, как выбирать элементы DOM, изменять их свойства, обрабатывать события кликов для переключения изображений и создавать базовый функционал слайдера. Каждое задание направлено на постепенное усложнение и закрепление полученных знаний на практике.
- Модуль 1: Основы выбора элементов
- Выбор элемента по ID.
- Выбор элементов по классу.
- Выбор элементов по тегу.
- Выбор по селектору CSS.
- Выбор по атрибуту.
- Поиск элементов внутри другого элемента.
- Поиск родительского элемента.
- Поиск соседних элементов (предыдущий, следующий).
- Поиск первого и последнего дочернего элемента.
- Поиск всех дочерних элементов.
- Модуль 2: Манипуляция содержимым
- Модуль 3: Работа с атрибутами
- Модуль 4: Управление классами
- Модуль 5: Управление стилями
- Модуль 6: Создание и удаление элементов
- Создание нового элемента.
- Вставка элемента перед другим элементом.
- Вставка элемента после другого элемента.
- Добавление элемента в определенную позицию внутри списка дочерних элементов.
- Удаление элемента из DOM.
- Замена одного элемента другим.
- Перемещение существующего элемента в другое место DOM..
- Очистка содержимого элемента без его удаления.
- Модуль 7: Обработка событий
- Модуль 8: Работа с формами
- Модуль 9: Продвинутые манипуляции
- Модуль 10: Работа с размерами и прокруткой
- Получение размеров элемента.
- Получение позиции элемента относительно окна браузера.
- Получение позиции элемента относительно родительского элемента.
- Управление прокруткой страницы.
- Определение, виден ли элемент в текущей области просмотра.
- Плавная прокрутка к элементу.
- Создание элемента, который фиксируется при прокрутке.
- Модуль 11: Работа с медиа-элементами
- Модуль 12: Практические задания
Скрытие изображений и отображение первого
Используйте JavaScript, чтобы скрыть все изображения слайдера, кроме первого. При загрузке страницы должен быть виден только первый слайд.
.slider-container {
display: flex;
overflow: hidden;
width: 300px;
}
.slider-image {
width: 300px;
height: auto;
}
.hidden {
display: none !important;
}
<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>
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);
Кнопка "Следующий слайд"
Добавьте кнопку "Next" и JavaScript код, чтобы при нажатии на нее отображалось следующее изображение в слайдере.
.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;
}
<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>
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");
});
Кнопка "Предыдущий слайд"
Добавьте кнопку "Previous" и JavaScript код для отображения предыдущего изображения при нажатии.
.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;
}
<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>
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");
});
Автоматическая смена слайдов
Реализуйте автоматическую смену слайдов через определенный интервал времени, например, каждые 3 секунды.
.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;
}
<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>
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);
Пауза при наведении мыши
Остановите автоматическую смену слайдов, когда курсор мыши находится над слайдером, и возобновите, когда курсор уходит.
.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;
}
<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>
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);
Индикаторы слайдов
Добавьте индикаторы (точки) под слайдером, чтобы показывать текущий слайд. Количество индикаторов должно соответствовать количеству изображений.
.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;
}
<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>
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);