Как создать слайдер изображений с помощью JavaScript, чтобы улучшить ваш сайт
Приходилось ли вам сталкиваться с ситуацией, когда вы хотите отобразить несколько изображений/видео в одном разделе веб-страницы, но не хотите занимать много места? Хотите добавить интерактивности своим веб-страницам или сделать их более привлекательными? Слайдер изображений может избавить вас от этой проблемы. В этой статье мы дадим определение слайдера изображений, рассмотрим необходимые условия для создания слайдера изображений и способы его создания с помощью HTML, JavaScript и CSS.
Что такое слайдер изображений?
Слайдеры – это карусели или слайд-шоу, в которых отображаются тексты, изображения или видео. В этой статье речь пойдет о слайдерах изображений. Большинство веб-разработчиков используют слайдеры на главной странице для демонстрации рекламных предложений или наиболее важной информации.
Вот некоторые причины, по которым вы должны использовать слайдеры на своих веб-страницах:
- Улучшение пользовательского опыта: Идеальная веб-страница должна быть компактной, чтобы конечным пользователям не приходилось прокручивать и листать ее, чтобы получить важные данные. Если у вас есть несколько изображений, вы можете избавить пользователей от необходимости прокрутки, отобразив их в слайдере.
- Визуальная привлекательность: Большинство пользователей веб-сайта не станут тратить много времени на простую веб-страницу. Вы можете улучшить визуальную привлекательность с помощью слайдеров и анимации.
- Экономия места: Если у вас есть 20 изображений, которые вы хотите разместить на веб-странице, они могут занять много места. Создание слайдера позволит вам сэкономить место и при этом дать пользователям доступ ко всем изображениям.
- Отображение динамического контента: Вы можете использовать слайдеры для отображения динамического контента, такого как вставки социальных сетей, блоги и новости.
Необходимые условия для создания слайдера изображений
- Базовое понимание HTML: Здесь мы опишем структуру слайдера. Вам должно быть удобно работать с различными HTML-тегами, классами и div’ами.Базовое понимание CSS: Мы будем использовать CSS для стилизации слайдеров изображений и кнопок.
- Базовое понимание JavaScript: Мы будем использовать JavaScript, чтобы сделать слайдеры изображений отзывчивыми.
- Редактор кода: Вы можете использовать редактор кода по своему усмотрению. Я буду использовать Visual Studio Code.
- Коллекция изображений.
Настройка папки проекта
Нам понадобится папка проекта, папка с изображениями в ней, а также файлы HTML, CSS и JavaScript. Я назову свой проект “Image-Slider”. Вы можете создать проект вручную или воспользоваться этими командами для начала работы:
mkdir Image-Slider
cd Image-Slider
mkdir Images && touch index.html styles.css script.js
Добавьте все изображения в папку “Images”, которую мы создали внутри папки проекта, и переходите к следующему шагу. Это папка моего проекта, в которую я добавил шесть изображений, которые я буду использовать для создания слайдера. Весь наш HTML-код будет находиться в файле index.html.
Типы слайдеров изображений
У нас может быть два типа слайдеров изображений: автоматический слайдер и автоматический слайдер изображений с кнопками.
Автоматический слайдер изображений
Автоматический слайдер автоматически прокручивается к следующему изображению через заданное время, например, через 3 секунды.
HTML-код
Вот мой HTML-код;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="styles.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" />
</head>
<body>
<div id="slider">
<div class="slide">
<h1>African</h1>
<img src="Images" alt="Image 1">
</div>
<div class="slide">
<h1>American</h1>
<img src="Images" alt="Image 2">
</div>
<div class="slide">
<h1>Asian</h1>
<img src="Images" alt="Image 3">
</div>
<div class="slide">
<h1>Arabic</h1>
<img src="Images" alt="Image 4">
</div>
<div class="slide">
<h1>Modern </h1>
<img src="Images" alt="Image 5">
</div>
<div class="slide">
<h1> European </h1>
<img src="Images" alt="Image 6">
</div>
</div>
<script src="script.js"></script>
</body>
</html>
Из этого кода мы можем отметить следующее:
- Я импортировал свой файл CSS в файл index.html в раздел <head>. Он будет использоваться в последующих шагах. <link rel=”stylesheet” href=”styles.css”>
- Я добавил JavaScript в свой HTML-код непосредственно перед закрывающим тегом <body>. Я буду использовать JavaScript для добавления функциональности слайдерам.
- Каждый слайд имеет класс слайда.
- Я использовал тег <img> для импорта изображений из папки Images.
Стиль автоматического слайдера изображений с помощью CSS
Теперь мы можем стилизовать наши изображения, поскольку мы уже связали CSS и HTML файлы.
Добавьте этот код в ваш файл CSS:
#slider {
width: 80%;
}
.slide {
width: 80%;
display: none;
position: relative;
}
.slide img {
width: 80%;
height: 80%;
}
.slide.active {
display: block;
}
Из этого кода мы можем отметить следующее:
- Мы установили ширину и высоту нашего слайдера на 80%.
- Мы установили для активного слайда значение block, что означает, что только активный слайд будет отображаться, а остальные будут скрыты.
Как добавить JavaScript, чтобы сделать слайдер изображений отзывчивым
Добавьте этот код в файл script.js:
var slides = document.querySelectorAll('.slide');
var currentSlide = 0;
var slideInterval = setInterval(nextSlide,2000);
function nextSlide() {
slides[currentSlide].className = 'slide';
currentSlide = (currentSlide+1)%slides.length;
slides[currentSlide].className = 'slide active';
}
Этот JavaScript делает следующее;
- Мы используем селектор document.querySelectorAll, чтобы выбрать все элементы с классом slide.
- Мы задаем начальное значение currentSlide 0.
- Мы устанавливаем slideInterval равным 2000 (2 секунды), то есть изображения в слайде меняются через каждые 2 секунды.
- Этот код slides[currentSlide].className = ‘slide’; удаляет активный класс из текущего слайда
- Этот код currentSlide = (currentSlide + 1) % slides.length; увеличивает индекс текущего слайда.
- Этот код slides[currentSlide].className = ‘slide active’; добавляет активный класс к текущему слайду.
Автоматический слайдер с кнопками
Созданный нами слайдер изображений автоматически прокручивается через каждые 2 секунды. Теперь мы можем создать изображение, в котором пользователи могут переходить к следующему слайду, нажав на кнопку, или автопрокрутку через каждые 3 секунды, если пользователь не нажимает на кнопки.
HTML-код
Вы можете изменить содержимое вашего файла index.html следующим образом:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Image Slider</title>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css"
/>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="container">
<div class="mySlides">
<img src="Images" style="width:100% ; height:50vh" >
</div>
<div class="mySlides">
<img src="Images" style="width:100% ; height:50vh">
</div>
<div class="mySlides">
<img src="Images" style="width:100% ; height:50vh">
</div>
<div class="mySlides">
<img src="Images" style="width:100% ; height:50vh">
</div>
<div class="mySlides">
<img src="Images" style="width:100% ; height:50vh">
</div>
<a class="prev" onclick="plusSlides(-1)">❮</a>
<a class="next" onclick="plusSlides(1)">❯</a>
<div class="caption-container">
<p id="caption"></p>
</div>
<div class="row">
<div class="column">
<img class="demo cursor" src="Images" style="width:100%" onclick="currentSlide(1)" alt="European">
</div>
<div class="column">
<img class="demo cursor" src="Images" style="width:100%" onclick="currentSlide(2)" alt="African">
</div>
<div class="column">
<img class="demo cursor" src="Images" style="width:100%" onclick="currentSlide(3)" alt="American">
</div>
<div class="column">
<img class="demo cursor" src="Images" style="width:100%" onclick="currentSlide(4)" alt="Asian">
</div>
<div class="column">
<img class="demo cursor" src="Images" style="width:100%" onclick="currentSlide(5)" alt="Modern">
</div>
</div>
</div>
<script src="script.js"></script>
</body>
</html>
Этот HTML-код работает следующим образом;
- У нас есть класс mySlides, который содержит пять изображений.
- У нас есть две кнопки, “prev” и “next” с onClick, позволяющие пользователям прокручивать слайды.
- У нас есть миниатюра, которая показывает изображения в нижней части веб-страницы.
Код CSS
Добавьте это в ваш код:
* {
box-sizing: border-box;
}
.container {
position: relative;
}
.mySlides {
justify-content: center;
}
.cursor {
cursor: pointer;
}
.prev,
.next {
cursor: pointer;
position: absolute;
top: 40%;
width: auto;
padding: 16px;
margin-top: -50px;
color: rgb(34, 143, 85);
font-weight: bold;
font-size: 20px;
border-radius: 0 3px 3px 0;
user-select: none;
-webkit-user-select: none;
}
.next {
right: 0;
border-radius: 3px 0 0 3px;
}
.prev:hover,
.next:hover {
background-color: rgba(0, 0, 0, 0.8);
}
.caption-container {
text-align: center;
background-color: orangered;
padding: 2px 16px;
color: white;
}
.row:after {
content: "";
display: table;
clear: both;
}
.column {
float: left;
width: 16.66%;
}
.demo {
opacity: 0.6;
}
.active,
.demo:hover {
opacity: 1;
}
Код CSS работает следующим образом:
- Мы установили свойство display класса .mySlides как none, что означает, что все слайды скрыты по умолчанию.
- Мы установили непрозрачность наведенных миниатюр равной 1 с помощью правила active, .demo:hover {opacity: 1;}.
Код JavaScript
let slideIndex = 1;
showSlides(slideIndex);
function plusSlides(n) {
showSlides(slideIndex += n);
}
function currentSlide(n) {
showSlides(slideIndex = n);
}
let slideInterval = setInterval(() => {
plusSlides(1);
}, 3000);
let slideshowContainer = document.getElementsByClassName('slideshow-container')[0];
slideshowContainer.addEventListener('mouseenter', () => {
clearInterval(slideInterval);
});
slideshowContainer.addEventListener('mouseleave', () => {
slideInterval = setInterval(() => {
plusSlides(1);
}, 3000);
});
function showSlides(n) {
let i;
let slides = document.getElementsByClassName("mySlides");
let dots = document.getElementsByClassName("demo");
let captionText = document.getElementById("caption");
if (n > slides.length) {slideIndex = 1}
if (n < 1) {slideIndex = slides.length}
for (i = 0; i < slides.length; i++) {
slides[i].style.display = "none";
}
for (i = 0; i < dots.length; i++) {
dots[i].className = dots[i].className.replace(" active", "");
}
slides[slideIndex-1].style.display = "block";
dots[slideIndex-1].className += " active";
captionText.innerHTML = dots[slideIndex-1].alt;
}
Вы можете получить окончательный исходный код здесь.
Наш код JavaScript делает следующее:
- У нас есть функция currentSlide со значением display, установленным как none. Это правило позволяет нашей веб-странице отображать только текущий слайд.
- У нас есть функция plusSlides, которая добавляет/вычитает заданное значение из slideIndex, чтобы определить, какой слайд отображать.
- Если пользователь не нажимает на кнопки, слайды будут автоматически прокручиваться через каждые 3000 миллисекунд.
Тестирование и отладка слайдера изображений
Ошибки и погрешности являются частью пути разработчика, и наличие их в вашем коде не означает, что вы плохой разработчик. Если ваш код не работает даже после выполнения описанных выше шагов, вы можете попробовать эти варианты тестирования и отладки для устранения ошибок:
- Отлаживайте каждый файл отдельно: Наш код состоит из трех файлов – HTML, CSS и JavaScript. Эти три языка имеют разные правила. Вы можете проверить правильность HTML, CSS и JavaScript кодов с помощью таких инструментов, как W3C Markup Validation Service для HTML, CSS Validator для CSS кода и Chrome DevTools для проверки JavaScript кода.
- Выполняйте различные типы тестов: Вы можете провести визуальные тесты, чтобы убедиться, что изображения отображаются правильно, тесты производительности, чтобы проверить, являются ли изображения отзывчивыми, и функциональные тесты, чтобы убедиться, что изображения являются навигационными.
- Тестируйте код с различными форматами и размерами изображений: Хороший слайдер изображений должен работать с различными форматами и размерами изображений.
- Автоматизируйте свои тесты: Автоматизация повсюду, и вы тоже можете извлечь из нее пользу при тестировании. Вы можете использовать такие инструменты, как Selenium или LoadRunner, для написания и выполнения сценариев автоматизации тестирования. Эти инструменты также позволяют повторно использовать некоторые из ваших тестов.
- Документируйте свои тесты: Тестирование – это непрерывный процесс. Возможно, вам придется постоянно улучшать тесты, пока ваш код не будет работать так, как ожидается. Документируйте этот процесс, чтобы сделать ваш код читабельным и удобным для использования.
Слайдеры изображений: Лучшие практики
- Будьте проще: Слайдеры привлекательны. Однако количество изображений в слайдере должно быть небольшим. Идеальным вариантом будет 4-7 изображений на слайд.
- Тестируйте свои слайдеры: Проверьте их функциональность, прежде чем публиковать их в Интернете.
- Создавайте отзывчивые слайдеры: Убедитесь, что созданные вами слайдеры реагируют на различные размеры экрана.
- Используйте высококачественные изображения: Возьмите/скачайте высококачественные изображения для своих слайдеров. Сохраняйте изображения в формате SVG – это отличный подход, так как они не теряют своего качества при изменении размера.
- Измените размер изображений: У вас могут быть разные размеры и форматы изображений. Всегда следите за тем, чтобы изображения в слайдере были одинакового размера. Этого можно добиться с помощью CSS.
Подведение итогов
Мы надеемся, что теперь вы можете создать полнофункциональный слайдер изображений для отображения важных данных на вашем сайте без использования UI-фреймворков. Вы можете использовать тот же подход для создания видеослайдеров на веб-страницах.