Простая адаптивная галерея изображений на JavaScript

Простая адаптивная галерея изображений на JavaScript

От автора: в этой статье давайте создадим галерею на JavaScript. Простая адаптивная галерея изображения на JavaScript, именно об этом пойдет речь в данной статье.

Параметры изображения

Как и в другом примере галереи изображений, нам понадобится две версии одного изображения: миниатюрка и полноразмерное фото. В таком случае у нас есть два варианта:

Присвоить изображениям одинаковые имена, но хранить их в разных папках: thumbnails и fullsize. Лучший вариант для сайтов с большим количеством ресурсов. Мы пойдем этим путем.

Присвоить изображениям разные имена и хранить их вместе: к примеру newyork-full.jpg (большое) and newyork.jpg (превью). В CodePen демо в нашей статье используется этот способ.

Разметка

Разметка почти такая же, как в предыдущих примерах:

Необходимо представить перед пользователем полноразмерные изображения по умолчанию; это не только облегчит код JavaScript, но также пользователю хоть будет на что смотреть: удивительно, как много веб-дизайнеров думают, что пользователи всегда нажимают на превью. (на самом деле никто не нажимает на превью).

Поля input типа image позволяют перемещаться между изображениями при помощи клавиатуры, а, следовательно, поля становятся доступными. Также в состоянии hover появляются подсказки по навигации. Удивительно, но данные поля также поддерживают атрибут srcset для Retina изображений. (Рассмотрим ниже).

CSS

Проще всего создать галерею с помощью flexbox:

Результат можно посмотреть в начале статьи.

Скрипт

Добавьте в самый конец страницы:

Пояснение: после определения необходимых элементов при помощи распространения события скрипт определяет, на какую превьюшку был совершен клик пользователем. Путь к полноразмерному изображению получается при помощи разбиения имени превью по символу «/», результат сохраняется в массиве, а последний элемент массива вытягивается, и к нему добавляется строка «fullsize/». В атрибуте alt в превью изображения указывается текст для полноразмерного изображения.

Если текст alt отличается от figcaption – часто бывает – то можно воспользоваться атрибутом data и создать data-caption для каждой превьюшки, в скрипте считывать текст и создавать заголовки для полноразмерных картинок при помощи dataset.

Именно этот способ мы используем в демо на Codepen. Если необходима большая поддержка в браузерах (с IE10 и ниже не поддерживается dataset), можно воспользоваться getAttribute:

Добавляем поддержку Retina

Добавить поддержку HiDPI изображений довольно-таки просто. Инпуты необходимо заменить на:

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

В этом случае в пути изображения отсекается его расширение; путь к изображению заново собирается для удвоенных изображений 2х (fullsize/moab-2x.jpg).

Ограничения и недостатки

Помимо своей эффективности, в данном методе есть и недостатки:

К данному методу нельзя применить технику прогрессивного улучшения; если пользователь выключит JS, он не увидит полноразмерные изображения кроме первого. В следующей статье есть способы решения данной проблемы.

На странице отсутствует история действий пользователя, хотя ее можно добавить через History API.

В отличие от PHP метода, нельзя направить пользователя на конкретное изображение через ссылку, можно лишь считывать URL из браузера.

Источник: //thenewcode.com/

Редакция: Команда webformyself.

Метки:

Похожие статьи:

Комментарии Вконтакте: