vgapp 0.8.0 → 0.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,105 @@
1
+ # VGSpy — Модуль отслеживания прокрутки (Scroll Spy)
2
+
3
+ `VGSpy` — это JavaScript-модуль, реализующий функционал **"spy"** (шпион), который автоматически подсвечивает активные пункты навигации в зависимости от текущей позиции прокрутки страницы. Поддерживает плавную прокрутку, работу с кастомными контейнерами и вложенными элементами (например, выпадающими списками).
4
+
5
+ ---
6
+
7
+ ## 📌 Возможности
8
+
9
+ - ✅ Автоматическое выделение активного пункта навигации при прокрутке.
10
+ - ✅ Поддержка прокрутки как всего окна, так и внутренних контейнеров с `overflow`.
11
+ - ✅ Плавная прокрутка к секциям по клику на ссылки.
12
+ - ✅ Поддержка вложенных структур: навигация, списки, выпадающие меню.
13
+ - ✅ Гибкая настройка через `data-*` атрибуты или JavaScript.
14
+ - ✅ Использование `IntersectionObserver` для высокой производительности.
15
+ - ✅ Совместимость с модульной системой `VG`.
16
+
17
+ ---
18
+
19
+ ## 🧩 Использование
20
+
21
+ ### HTML
22
+
23
+ Добавьте атрибут `data-vg-toggle="spy"` к навигационному элементу (например, `.nav` или `.list-group`), и убедитесь, что ссылки ведут на якоря (например, `href="#section1"`).
24
+
25
+ ```html
26
+ <ul class="list flex-column vg-spy" data-vg-toggle="spy" id="vgspy-sidebar">
27
+ <li><a href="#linkFirstBlock">Первый блок</a></li>
28
+ <li><a href="#linkSecondBlock">Второй блок</a></li>
29
+ <li><a href="#linkThirdBlock">Третий блок</a></li>
30
+ <li><a href="#linkFourthBlock">Четвертый блок</a></li>
31
+ <li><a href="#linkFifthBlock">Пятый блок</a>
32
+ <ul>
33
+ <li><a href="#linkFifthBlockPathOne">Пятый блок. Часть первая</a></li>
34
+ </ul>
35
+ </li>
36
+ <li><a href="#linkSixthBlock">Шестой блок</a></li>
37
+ </ul>
38
+ ```
39
+
40
+ > 💡 Если используется прокрутка внутри контейнера (не `window`), укажите `target` (см. ниже).
41
+
42
+ ---
43
+
44
+ ## ⚙️ Параметры
45
+
46
+ | Параметр | Тип | По умолчанию | Описание |
47
+ |--------|------|-------------|----------|
48
+ | `offset` | `number` | `null` | *(устарело)* Смещение активации (в пикселях). Используйте `rootMargin` вместо этого. |
49
+ | `rootMargin` | `string` | `'0px 0px -25%'` | Отступы для `IntersectionObserver`. Управляет, насколько "внутрь" должна зайти секция, чтобы стать активной. |
50
+ | `smoothScroll` | `boolean` | `true` | Включить плавную прокрутку при клике на якорные ссылки. |
51
+ | `target` | `HTMLElement \| string` | элемент с `data-vg-toggle="spy"` | Контейнер, внутри которого происходит прокрутка. Если не указан — используется `window`. |
52
+ | `threshold` | `number[] \| string` | `[0.1, 0.5, 1]` | Пороги видимости (от 0 до 1), при которых срабатывает активация. Можно передать строку: `'0.1, 0.5, 1'`. |
53
+
54
+ ---
55
+
56
+ ## 📣 События
57
+
58
+ | Событие | Описание | `event.relatedTarget` |
59
+ |-------|--------|---------------------|
60
+ | `activate.vg.spy` | Срабатывает при активации нового пункта навигации | Ссылка, которая стала активной |
61
+
62
+ ## 🧱 Поддерживаемые структуры
63
+
64
+ - `.nav`, `.nav-link`, `.nav-item`
65
+ - `.list-group`, `.list-group-item`
66
+ - Вложенные `.vg-dropdown` с `.vg-dropdown-item`
67
+ - Произвольные контейнеры с `href="#id"` ссылками
68
+
69
+ ---
70
+
71
+ ## 🔧 Методы
72
+
73
+ | Метод | Описание |
74
+ |------|--------|
75
+ | `refresh()` | Перезапускает модуль: пересканирует ссылки и секции, пересоздаёт observer. |
76
+ | `dispose()` | Удаляет observer и освобождает ресурсы. |
77
+
78
+ ---
79
+
80
+ ## 🧪 Производительность
81
+
82
+ - Используется `IntersectionObserver` — не нагружает страницу.
83
+ - Плавная прокрутка отключается, если `smoothScroll: false`.
84
+ - Поддержка `requestAnimationFrame` не требуется — логика основана на нативных браузерных событиях.
85
+
86
+ ---
87
+
88
+ ## 📚 Заметки
89
+
90
+ - Убедитесь, что все целевые секции имеют `id`, соответствующий `href` ссылки.
91
+ - Секции должны быть видимы (`display: block`, `visibility: visible`).
92
+ - Работает с динамически добавленным контентом, но требует вызова `refresh()` после вставки.
93
+
94
+ ---
95
+
96
+
97
+ ## 📝 Лицензия
98
+
99
+ MIT. Свободно использовать и модифицировать.
100
+
101
+ ---
102
+
103
+ 📌 *Разработано в рамках фронтенд-системы VG Modules.*
104
+ > 🚀 Автор: VEGAS STUDIO (vegas-dev.com)
105
+ > 📍 Поддерживается в проектах VEGAS