javascript — Галерея с оверлеем
Вопрос задан
Изменён 2 года 4 месяца назад
Просмотрен 171 раз
Помогите пожалуйста реализовать галерею, или подскажите готовое решение с готовым функционалом как на скриншоте: http://prntscr.com/vmn588
Если подробнее, нужно сделать Grid сетку и в ней разместить изображения, по нажатию на которые будет открываться такой оверлей с возможностью переключаться между изображениями. Я нашёл парочку подходящих вариантов, но там настройка стилей, построение блоков и добавление самих изображений реализовано через JS, а хотелось бы размещать и стилизовать блоки (например добавлять описание под изображением) в HTML+CSS, как тут, например:
- javascript
- html
- css
посидел и подумал. .. Вот принцип, как можно всё реализовать, почти готовое решение
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-ho+j7jyWK8fNQe+A12Hb8AhRq26LrZ/JpcUGGOn+Y7RsweNrtN/tE3MoK7ZeZDyx" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.min.js" integrity="sha384-w1Q4orYjBQndcko6MimVbzY0tgp4pWB4lZ7lr30WKz0vr/aWKhXdBNmNb5D92v7s" crossorigin="anonymous"></script> <link rel="stylesheet" href="./styles/bootstrap/css/bootstrap.min.css"> <link rel="stylesheet" href="./styles/css1.css"> </head> <body> <div> <div> <div> <div> <a href="#mainimg"><img src="img/LogoWRP170x150.png"></img></a> <div> <p>Описание:</p> </div> </div> <div> <img src="img/LogoWRP170x150.png"></img> <div> <p>Описание:</p> </div> <a href="#"> <div> <img src="img/LogoWRP170x150. png"></img> </div> </a> </div> <div> <img src="img/LogoWRP170x150.png"></img> <div> <p>Описание:</p> </div> </div> <div> <img src="img/LogoWRP170x150.png"></img> <div> <p>Описание:</p> </div> </div> </div> </div> </div> </body> </html>
css
body { padding: 0%; margin: 0; } .header { background: wheat; height: 150px; } .main { background: yellowgreen; height: 500px; } .grid { background: yellow; height: 170px; width: 200px; margin-top: 10%; margin-left: 2%; margin-right: 2%; } . info { background: blue; } #mainimg { display: none; position: absolute; top: 0; left: 0; width: 100%; height: 100%; } #okno { width: 300px; height: 50px; text-align: center; padding: 15px; border: 1px solid whitesmoke; border-radius: 200px; color: #0000cc; position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; } #mainimg:target {display: block;}
Принцип работы: https://ibb.co/JFj0mRz https://ibb.co/bP40j7j
p.s Сорямба за кислотность, мне так удобнее блоки верстать.
1
Вдруг кому-то пригодится подобное решение. Готовая галерея FancyBox имеет кучу настроек, своего рода Swiper в мире галерей 😀 Ссылка: Перейти на сайт FancyBox
Зарегистрируйтесь или войдите
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Галерея примеров JavaScript API — GeoMixer
skip to Main Content
Плагин Leaflet-GeoMixer
Пример | Описание | Примечание |
GeoMixerMap. html | Загрузка карты с сервера GeoMixer-а | Загружаются все видимые слои заданной карты |
satelliteLayer.html | Загрузка базовой подложки – снимки | |
GMXLayerLeaflet.html | Загрузка слоя с сервера Geomixer. Демонстрируется работа с мультивременным слоем. | |
Animation.html | Предварительная загрузка данных слоя точек пожаров – показ точек за любой день при помощи ползунка. | |
Plugins.html | Интеграция с другими Leaflet плагинами | |
MultipleMaps.html | Несколько карт на одной странице | |
bindPopup.html | Включение балуна для векторного слоя | Добавление пользовательского контента в тело балуна. |
Пример | Описание |
canvas-boundary-edit.html | Draw boundary of a raster layer yourself |
canvas-boundary. html | A multipolygon with holes as a border |
Пример | Описание | |
Landsat8.html | Снимки Landsat | |
Editing.html | Перепривязка снимка |
Пользователь сам выбирает набор необходимых ему контролов.
Пример | Описание | Примечание |
L.Control.gmxLayers.html | Контрол слоев | |
L.Control.gmxZoom.html | Контрол зуммирования | |
L.Control.gmxBottom.html | Подкладка нижних контролов | |
L.Control.gmxCopyright.html | Контрол копирайтов | |
L.Control.gmxLocation.html | Контрол текущего масштаба и положения карты | |
L.Control.gmxIcon.html | Контрол иконок | |
L. | Контрол группы иконок | |
L.Control.boxZoom.html | BoxZoom контрол | |
L.Control.gmxHide.html | Контрол видимости верхних контролов | |
ScanexControls.html | Все плагины контролов GeoMixer-а |
Пример | Описание |
addDrawingObjects.html | Добавление редактируемых объектов на карту |
useDrawingControls.html | Использование контролов рисования |
12 лучших галерей JavaScript с открытым исходным кодом и библиотек лайтбоксов
Рекомендуемые
Хамза Муса
• 4 мин чтения
Представление фотографий на веб-сайтах особенно необходимо фотографам. Поскольку мы рассмотрели несколько типов решений для самостоятельно размещенных галерей, пришло время предложить разработчикам и программистам индивидуальные решения, которые помогут им создавать креативные причудливые фотогалереи.
1- nanoGallery 2
nanoGallery 2 — это библиотека галереи JavaScript с лайтбоксом и несколькими вариантами представления. Он позволяет просматривать фотографии в мозаичном представлении, в виде сетки, фильтровать фотографии по тегам, отображать видео и многое другое.
Скрипт nanoGallery можно встроить в любой веб-проект, он поддерживает миниатюры изображений, анимацию и эффекты наведения/касания.
Функции nanoGallery
- Несколько макетов галереи: сетка, выравнивание, каскадирование и мозаика.
- Предварительный просмотр размытого изображения во время загрузки изображения.
- Миниатюрные эффекты наведения/касания.
- Пагинация с поддержкой жеста смахивания.
- Ползунок на последней миниатюре.
- Многоуровневые альбомы и панель навигации.
- Определите специальные настройки для первого уровня альбома.
- Отзывчивый и удобный для устройств
- Сложная анимация отображения эскизов.
- Поддержка заголовков и описаний.
- Полностью настраиваемый макет миниатюр.
- Инструменты на миниатюрах.
- Фильтрация тегов/ключевых слов.
- Перекрывающиеся миниатюры.
- Выбираемые миниатюры с флажками.
2- PhotoViewer
Библиотека PhotoViewer — это простая библиотека JavaScript, которая позволяет отображать фотографии из Flicker или других источников в любом приложении JavaScript.
Библиотека поддерживает полноэкранный режим, масштабирование, слайд-шоу и поставляется с подписью, которая сохраняет исходную ссылку и имя автора.
Photoviewer Особенности. Основные моменты
- Vanilla JS
- Modal Draggable
- Modal Resizeable
- Modal Maximize
- . Несколько экземпляров
- Поддержка браузера IE9+
- Поддержка RTL
3- Галерея
Галерея позволяет отображать фотографии и видео из многих источников без знания кода. В настоящее время он поддерживает Flicker, Vimeo, YouTube и несколько других источников.
Сценарий поддерживает устройства iPhone, iPad и Android с его родным смахиванием. Он также предлагает поддержку нескольких тем.
4- Bilderrahmen
Легкий лайтбокс с изображением vanilla-JS для минималистов, созданный с помощью CSS3 и встроенных значков SVG для современных браузеров.
Особенности Bilderrahmen
- чистый JavaScript, без зависимостей
- поддержка нескольких галерей на странице
- минимальный вид
- поддержка названия изображения
- Adpressive
- встроенные кнопки SVG
- MP4 Video Support (HTML 5 Видео)
- Минифицированные: JS 4,7 КБ CSS 4,2 КБ всего 8,9 КБ
- GZEPD: JS 1,5 КБ CSS 2,0 КБ 3,5 КБ
5- The CSS 2,0 КБ.
ФотогалереяЭтот проект позволяет вам создать полноэкранную галерею с потрясающими презентациями и причудливым дизайном для ваших фотографий. В отличие от других проектов, он поддерживает фотографии изображений HEIC и Raw и позволяет создавать фотографии с помощью удаленного API.
Фотогалерея выделяет
- Полная ширина фото дисплей. обслуживает обычный HTML + JS, после развертывания в рабочей среде это быстро
- Автоматическая динамическая регенерация при редактировании/удалении/добавлении фотографий
- Может обрабатывать сотни (и тысячи?) изображений одновременно
- Ленивая загрузка при прокрутке
- Полноэкранный режим
- Интеграция с Imagor
- Сортировка изображений .
7- PicView
PicView — это быстрая программа для просмотра изображений с компактным пользовательским интерфейсом, который можно скрыть. Включает графические эффекты, галереи, EXIF и многое другое. Приложение может автоматически подстраиваться под ваш экран.
8- PhotoSwipe
PhotoSwipe — это простая, но мощная галерея изображений JavaScript и библиотека лайтбоксов. Вы можете расширить его функциональность с помощью плагинов. Проект выпущен под лицензией MIT.
9- Полноэкранный лайтбокс
Это простой в использовании, но мощный подключаемый модуль для отображения различных типов источников, таких как изображения, HTML-видео или видео YouTube, в чистом перекрывающемся блоке. Поддерживает, среди прочего, подписи, миниатюры и масштабирование.
Представьте единый источник или создайте красивую галерею со стильным лайтбоксом без jQuery.Разработчики предлагают 3 версии: Vanilla JavaScript, React и Vue, которые готовы к установке и использованию без сложной настройки.
10- lightGallery
LightGallery — это легкий модульный плагин галереи изображений и видео на JavaScript. Он доступен для React.js, Vue.js, Angular и TypeScript.
Вы можете смешивать все типы поддерживаемого содержимого в одной галерее. lightGallery автоматически найдет тип контента из источника и создаст соответствующие слайды:
- Изображения: поддерживает любые типы изображений, включая адаптивные изображения и WebP с резервной поддержкой JPG.
- Видео: встроенная поддержка YouTube, Vimeo, Wistia и всех типов видеоформатов HTML5. Например, MP4, WebM, Ogg и т. д. L
- фреймы iframe: легко встраивайте внешние веб-сайты, отображайте PDF-файлы, карты Google и т. д.
11- SimpleLightbox
галереи. Он поддерживает WordPress и TYPO3 из коробки.
12- Фотогалерея материалов
Фотогалерея материалов позволяет создавать веб-галереи изображений, похожие на Google Фото. Он без проблем работает во всех современных браузерах, таких как Edge, Google Chrome, Firefox и Safari.
Другие статьи по теме с открытым исходным кодом
20 открытых и бесплатных библиотек компонентов пользовательского интерфейса React
React — это среда JavaScript с открытым исходным кодом, популярная для создания комплексных и полнофункциональных веб-приложений. Он прост в использовании, надежен и гибок, а также имеет обширное сообщество разработчиков. React имеет процветающую экосистему библиотек, фреймворков, руководств и проектов с открытым исходным кодом. Это предпочтительный выбор для
12 бесплатных решений для управления базой знаний с открытым исходным кодом для команд, стартапов и предприятий
Что такое решение для управления знаниями? Решение для управления знаниями — это программное приложение, предназначенное для сбора, хранения и обмена информацией внутри организации. Это позволяет эффективно управлять данными, документами и другими формами контента. Конечной целью приложения для управления знаниями является облегчение
Logseq — это корпоративная платформа управления знаниями с открытым исходным кодом для команд
Что такое Логсек? Logseq — это исключительная бесплатная платформа для управления знаниями и совместной работы с открытым исходным кодом, которая уделяет первостепенное внимание конфиденциальности, долговечности и контролю пользователей. Он предлагает надежные инструменты для управления знаниями, совместной работы, аннотирования PDF-файлов и управления задачами с возможностью обработки нескольких форматов файлов, включая Markdown и Org-mode. Logseq также предоставляет
Lenstube — это децентрализованная платформа для обмена видео в социальных сетях.
Что такое Лентуб? Lenstube — это социальная медиа-платформа для обмена видео, которая работает на полностью децентрализованной инфраструктуре с открытым исходным кодом, что означает, что она построена с учетом идеи прозрачности и автономии пользователей. Платформа построена с использованием протокола Lens, который специально разработан для предоставления пользователям
AFFiNE.PRO — это собственная база знаний с открытым исходным кодом и альтернатива Notion.AI
Notion — это исключительная онлайн-платформа для совместного ведения заметок и обмена знаниями между отдельными лицами, командами и организациями. С Notion вы можете легко организовывать свои заметки, писать подробные статьи и создавать наборы данных в различных представлениях, включая таблицы, канбаны и динамические представления, подобные базам данных. Кроме того, Notion позволяет создавать
Foam — это система управления личными знаниями
Что такое пена? Foam — это исключительная система управления личными знаниями и обмена ими, вдохновленная Roam Research. Он построен на Visual Studio Code, мощном текстовом редакторе, предлагающем широкий набор функций как для разработчиков, так и для тех, кто не является разработчиком. Пена предоставляет пользователям широкий спектр
Галерея — Splide
Введение
В этом руководстве вы узнаете, как управлять каруселью с помощью базовых API, создав следующую галерею. Когда основная карусель перемещается, активная миниатюра будет меняться. Кроме того, миниатюры кликабельны для навигации по основной карусели.
HTML и CSS
Во-первых, давайте напишем разметку для создания карусели и эскизов. Make sure to describe your images by
alt
:<
section
id
=
"main-carousel"
class
=
"splide"
aria-label
=
"Моя удивительная галерея"
>
<
div
class
=
"splide__track"
>
<
ul
class
=
"splide__list"
>
<
li
класс
=
"splide__slide"
>
902
51
src
=
"image1. jpg"
alt
=
""
>
<
li
class
=
"Splide__slide"
>
<
IMG
SRC
=
"Image2.jpg"
=
"
1
.0250 =
""
>
<
li
class
=
"splide__slide"
>
<
img
src
=
"image3. jpg"
alt
=
""
>
<
li
class
=
"splide__slide"
>
<
img
src
=
"image4.jpg"
alt
=
«
>
<
/
DIV
>
HTML Затем настройте эскизы по своему усмотрению. В этом примере используется следующий CSS: CSS Затем примените Splide к основной карусели. В этом примере нумерация страниц отключена, так как в карусели будет элемент управления миниатюрами: JavaScript Хорошо, наиболее важная часть придет 💪 , чтобы сделать миниатюр, нам необходимо прослушать их JavaScript When the user clicks thumbnail, основная карусель должна переместиться на соответствующий слайд.
Вы можете перемещать карусель с помощью JavaScript Теперь мы можем перемещаться по карусели, щелкая миниатюры, но пользователь не будет уверен, какая миниатюра выбрана в данный момент.
Чтобы подчеркнуть это с помощью CSS, добавим к активной миниатюре класс <
/
.0003
<
ul
id
=
"thumbnails"
class
=
"thumbnails"
>
<
li
class
=
"thumbnail"
>
<
img
src
=
"thumbnail1. jpg"
alt
=
""
>
<
li
class
=
"thumbnail"
>
<
img
src
=
"thumbnail2.jpg"
alt
=
""
>
<
li
class
=
"thumbnail"
>
<
img
src
=
"thumbnail3.jpg"
alt
=
""
>
<
0250
<
img
src
=
"thumbnail4. jpg"
alt
=
""
>
<
/
ul
>
.thumbnails
{
дисплей
:
гибкий
;
margin
:
1
rem
auto
0
;
прокладка
:
0
;
по ширине
:
по центру
;
}
.
высота
:
70
px
;
переполнение
:
скрытый
;
стиль списка
:
нет
;
поля
:
0
0,2
рем
1 9;
курсор
:
указатель
;
}
.thumbnail
изображение
{
ширина
:
100
%
;
высота
:
авто
;
}
Основная карусель
var
splide
=
new
Splide
(
'#main-carousel'
,
{
pagination
:
ложь
,
}
)
;
Слайд
.
крепление
(
)
;
Миниатюры
Click
:
250250250250250250250250250250250250250250250250250125025015515025025025015515015015551501502501502501н5н5н5н0н.
=
документ
.
getElementsByClassName
(
'миниатюра'
)
;
for
(
var
i
=
0
;
i
<
thumbnails
.
length
;
i
++
)
{
initThumbnail
(
.
}
function
initThumbnail
(
thumbnail
,
index
)
{
эскиз
.
addEventListener
(
'click'
,
function
(
)
{
}
Splide#go()
, который может принимать индекс слайда:
var
splide
=
new
Splide
(
...
)
;
...
Функция
Инициация
(
,
2501550155501550155015501550155501555015550155501555501550155501555015555015550155501555015555015501555515015555150155015555012н5н5н5н0250
{
эскиз
.
addEventListener
(
'click'
,
function
(
)
{
splide
.
go
(
индекс
)
}
is-active
.
Вы можете переключать класс, прослушивая событие 'move'
, которое срабатывает каждый раз, когда карусель движется:
var
thumbnails
=
0250 документ 1
.
getElementsByClassName
(
'миниатюра'
)
;
переменная
текущая
;
...
шлейф
.
на
(
'перемещение'
,
функция
(
1 9 )0251
{
if
(
current
)
{
current
.
Список классов
.
удалить
(
'активен'
)
;
переменная
эскиз
=
эскизы
[
слайд
.
индекс
]
;
if
(
thumbnail
)
{
thumbnail
.
Список классов
.
добавить
(
'активен'
)
;
текущий
=
эскиз
;
}
)
;
JavaScript
Переменная current
содержит текущий элемент эскиза, поэтому мы можем удалить is-active
при его изменении.
С помощью IS-Active
Class, мы можем прояснить выбранную миниатюр, как SO:
.
}
.
}
CSS
Это лучше, но поскольку мы добавляем класс, когда карусель движется, изначально ни один слайд не активен. Мы можем исправить это с помощью события Mounted , которое запускается сразу после инициализации карусели:
splide
.
on
(
'mounted move'
,
function
(
)
{
}
)
;
JavaScript
Готово! 🎉 Here is the whole code of this tutorial:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
221
030003
23
24
25
26
27
28
29
30
31
var
splide
=
new
Splide
(
'#main-carousel'
,
{
pagination
:
false
,
}
)
;
var
эскизы
=
документ
.
getElementsByClassName
(
'миниатюра'
)
;
переменная
текущая
;
для
(
var
i
=
0
;
i
<
thumbnails
.
length
;
i
++
)
{
initThumbnail
(
Миниатюры
[
I
]
,
I
501555555550
I
5550
55555550
;
}
function
initThumbnail
(
thumbnail
,
index
)
{
thumbnail
.
addEventListener
(
'click'
,
function
(
)
{
splide
.
go
(
Индекс
)
;
}
SPLid0250 (
'mounted move'
,
function
(
)
{
var
thumbnail
=
0251
(
thumbnail
)
{
if
(
current
)
{
текущий
.
Список классов
.
удалить
(
«активен»
)
;
эскиз
.
Список классов
.
добавить
(
'активен'
)
;
текущий
=
эскиз
;
}
)
;
Слайд
.
крепление
(
)
;
JavaScript
Этот пример кода также доступен в CodeSandbox.
Эта галерея несовместима с опцией уничтожения
, поскольку Splide отбрасывает все обработчики при уничтожении.