diff --git a/DESIGN.md b/DESIGN.md index 50209c3..e6af351 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -172,6 +172,8 @@ | `.case-media--natural` | Изображение в натуральном масштабе | | `.case-media--content` | По ширине текстовой колонки | | `.case-media--wide` | Шире колонки статьи | +| `.case-media-gallery--wide` | Шире колонки статьи (галерея) | +| `.case-media-slider` | Слайдер: одна картинка, стрелки и точки-пагинация | --- diff --git a/docs/case-page-blocks.md b/docs/case-page-blocks.md index 3c7237b..1f076ee 100644 --- a/docs/case-page-blocks.md +++ b/docs/case-page-blocks.md @@ -141,6 +141,48 @@ **Сетка + отложенный `src`:** в ячейках можно задать реальный URL в **`data-src`** и плейсхолдер в `src` (крошечный `data:image/gif;base64,…`), чтобы [`initCaseSequentialImages`](public/js/modules/cases/sequential-images.js) подставлял картинки **по порядку в DOM** (в т.ч. строка за строкой в галерее). Пока у `img` есть `data-src`, просмотр по клику не открывается. Пример: [`src/pages/cases/lunacy.html`](src/pages/cases/lunacy.html). +### Слайдер изображений с точками (`case-media-slider`) + +Одна картинка во весь блок, навигация стрелками «пред/след» и пагинация точками (активная — акцентным цветом). Переиспользует маски стрелок `shevron-left/right.svg` и токены темы. Логика: [`public/js/modules/cases/media-slider.js`](public/js/modules/cases/media-slider.js) (`initCaseMediaSlider()` вызывается из [`public/js/main.js`](public/js/main.js)). + +**Возможности:** + +- стрелки `data-slider-prev` / `data-slider-next` — переключают соседний слайд, блокируются (`disabled`) на краях; +- точки `data-slider-dot` (в `data-slider-dots`) — переход на конкретный слайд, активная получает `is-active` + `aria-selected`; +- клавиатура: ←/→ внутри блока, Home/End на точках; +- тач/мышь-свайп (только горизонтальный); +- ленивая подгрузка соседних кадров: у `` можно задать `data-src` (временный `src` — прозрачный GIF), скрипт подставит при подходе, как у галереи; пока есть `data-src`, клик по viewer не открывается; +- клик по активному кадру открывает общий viewer кейса (`data-image-viewer`). + +**Разметка** (число `data-slider-dot` должно равняться числу `.case-media-slider__slide`; `aria-label` точек — «Перейти к изображению N»): + +```html +
+
+
+
+ … +
+
+ … +
+
+
+ + +
+ + +
+
+``` + +Живой пример: [`src/pages/cases/template-elements-demo.html`](src/pages/cases/template-elements-demo.html) (секция «Слайдер»). + ### Последовательная подгрузка (`data-case-sequential-images`) - Оберни фрагмент статьи с картинками (часто весь `.case-article`): **`data-case-sequential-images`** на контейнере. @@ -183,7 +225,7 @@ PNG/JPEG → WebP по папке: `docs/image-optimization.md`, скрипт `s Подключаемые через `{{> head-links}}` сценарии уже инициализируют: - последовательную подгрузку `data-src` внутри `[data-case-sequential-images]` (`initCaseSequentialImages`); -- просмотр картинок по клику (`data-image-viewer`, делегирование на документ); +- просмотр картинок по клику (`data-image-viewer`, делегирование на документ); при открытии из **галереи** (`.case-media-gallery`) или **слайдера** (`.case-media-slider`) в нижней панели просмотрщика появляются **кнопки-пилюли «пред/след»** и **точки-пагинация** — переключают только картинки этого блока (клавиши ←/→, свайп по горизонтали, клик по точке); у одиночной картинки кнопки и точки скрыты; - плеер видео кейса (`data-case-video-player`); - натуральный размер для `.case-media--natural img`; - сворачивание длинного скрина (`[data-case-tall-media]`, `initCaseTallMediaExpand`). diff --git a/public/assets/template-elements-demo/slider-demo-1.webp b/public/assets/template-elements-demo/slider-demo-1.webp new file mode 100644 index 0000000..66ec9a9 Binary files /dev/null and b/public/assets/template-elements-demo/slider-demo-1.webp differ diff --git a/public/assets/template-elements-demo/slider-demo-2.webp b/public/assets/template-elements-demo/slider-demo-2.webp new file mode 100644 index 0000000..bf53716 Binary files /dev/null and b/public/assets/template-elements-demo/slider-demo-2.webp differ diff --git a/public/assets/template-elements-demo/slider-demo-3.webp b/public/assets/template-elements-demo/slider-demo-3.webp new file mode 100644 index 0000000..e48474a Binary files /dev/null and b/public/assets/template-elements-demo/slider-demo-3.webp differ diff --git a/public/assets/template-elements-demo/slider-demo-4.webp b/public/assets/template-elements-demo/slider-demo-4.webp new file mode 100644 index 0000000..586ac54 Binary files /dev/null and b/public/assets/template-elements-demo/slider-demo-4.webp differ diff --git a/public/cases/design-system/index.html b/public/cases/design-system/index.html index b8b6c3f..cb81218 100644 --- a/public/cases/design-system/index.html +++ b/public/cases/design-system/index.html @@ -953,6 +953,19 @@ >

.has-img-loading · .is-img-loading · .img-ph-demo (демо заглушки)

+

TUI braille-спиннер

+

+ Загрузка тяжёлых изображений в просмотрщике (.case-image-viewer) показывается + моноширинным braille-спиннером — как в TUI. Чистый CSS, без JS: 10 кадров переключаются + через steps()-анимацию. Переиспользуемый класс .tui-spinner + (цвет — --accent, шрифт — системный mono). +

+
+ ⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏ + ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ +
+

.tui-spinner · кадры: ⠋ ⠙ ⠹ ⠸ ⠼ ⠴ ⠦ ⠧ ⠇ ⠏ · prefers-reduced-motion показывает ⠋

+

Карточка навыка

skill-task-card__task — формулировка задачи от бизнеса.

@@ -1044,7 +1057,7 @@ Живой эталон со всеми вариантами — на отдельной странице; оттуда копируют куски при сборке нового кейса.

- Демо элементов кейса + Демо элементов кейса

@@ -1055,7 +1068,7 @@ раскладка вынесены на отдельную страницу.

- Каталог карточек активности + Каталог карточек активности

diff --git a/public/cases/template-elements-demo/index.html b/public/cases/template-elements-demo/index.html index f65d344..d01804a 100644 --- a/public/cases/template-elements-demo/index.html +++ b/public/cases/template-elements-demo/index.html @@ -430,6 +430,44 @@
Ширина как у wide-картинки; на узком экране wide-обёртка схлопывается в 100% ширины колонки (см. медиазапросы).
+

Слайдер: одна картинка, стрелки и точки

+

+ Блок .case-media-slider показывает слайды по одному: навигация стрелками «пред/след», + пагинация точками (активная — акцентным цветом). Поддерживается клавиатура (←/→, Home/End на точках), + тач/мышь-свайп и ленивая подгрузка соседних кадров через data-src. Клик по активному + кадру открывает общий viewer кейса. +

+
+
+
+
+ Слайдер, кадр 1 +
+
+ Слайдер, кадр 2 +
+
+ Слайдер, кадр 3 +
+
+ Слайдер, кадр 4 +
+
+
+ + +
+ + + + +
+
+

Callout: важный абзац с эмоджи