Галерея с нестандартным переключением изображений
Разберёмся как сделать галерею изображений. При клике на изображение будет показываться увеличенная версия.
Создадим базовую HTML-структуру, необходимую для любой веб-страницы.
Добавим декларацию DOCTYPE, корневой элемент <html> с атрибутом языка, секцию <head> с мета-тегом для кодировки, заголовком страницы и ссылкой на CSS-файл, а также секцию <body>.
Добавим div с классом frame для расположения на странице. Будем центрировать галерею для наглядности.
Создадим разметку галереи изображений:
<div class="gallery"> для галереи;<div class="picture pic-N"> — обёртка для изображений;<img class="picture__image"> — изображение.
Центрируем .frame и зададим для наглядности обводку тенями.
У .gallery удалим стандартную стилизацию списка и установим свои стили. Сделаем сетку из картинок 3 x 3.
Каждой картинке, .picture, укажем конкретные размеры, это облегчит работу с анимацией.
Чтобы изображения не искажались, укажем object-fit: cover. Добавим переход для плавного изменения прозрачности.
Добавим анимацию small, которая будет срабатывать при загрузке страницы. В начале анимации контейнеры отмасштабированы в 3.0625 раза (чтобы закрывать весь контейнер) с помощью scale, в конце анимации они уменьшаются до обычного размера.
Зададим каждому контейнеру собственный transform-origin, чтобы изображения уменьшались каждый в направлении своего расположения в галерее.
Временно отключим анимацию появления и начнём писать JavaScript.
Подключим к HTML-странице файл script.js.
Найдём все элементы .picture на HTML-странице.
Повесим на каждый элемент .picture обработчик события клика.
Внутри обработчика клика добавляем всем элементам .picture класс away.
Элементу, на который кликнули, переключаем класс active и убираем класс away.
Обработчик уже работает, но ничего не происходит, так как надо добавить дополнительные стили.
Добавляем анимацию big для активного элемента, причем задаём animation-fill-mode со значением both. Благодаря этому состояние элемента сохраняется после проигрывания анимации.
Теперь переключение изображений при щелчке работает.
Добавляем стили, которые делают изображения внутри неактивных элементов полностью прозрачными.
Добавляем плавный переход для свойства opacity, чтобы изображения при переключении появлялись и исчезали плавно.
Теперь сделаем, чтобы класс away удалялся со всех изображений, когда происходит повторный клик по активному изображению.
На этом демонстрация завершена.