fix(report): instant nav jump + scroll-position scrollspy (#958) #2105

Merged
bot-backend merged 1 commit from fix/report-nav-jump-scrollspy into main 2026-06-30 10:45:34 +00:00
Collaborator

Summary

Follow-up к #2104. Скриншот-верификация с интеракциями на проде вскрыла два бага навигации (прод-замеры через javascript_tool):

  1. Прыжок не работал. window.scrollTo({behavior:"smooth"})no-op на этой странице: подтверждено замером ({top:8000, behavior:"smooth"} → scrollY остался 0; {behavior:"auto"} → сработал). Тяжёлый отчёт (Leaflet-карты, async §6 ~20-40с, lazy-чарты) даёт непрерывный reflow, отменяющий smooth-анимацию. Это и есть исходная жалоба «навигация не прыгает» — оригинальный код тоже был scrollIntoView({behavior:"smooth"}). → behavior:"auto" (instant).
  2. Scrollspy не трекал. Узкая IntersectionObserver-полоса (rootMargin -72px/-60%) пуста для высокой/нижней секции → if(next) держал старое значение (на §7 активной оставалась «1. Информация», замер: scrollY 12848 → activeNav «1. Информация»). → scroll-position подход (rAF-throttled): активна последняя секция, чья верхушка прошла offset-линию; на низу страницы форсим последнюю секцию. Детерминированно, никогда не «пусто».

Test plan

  • tsc --noEmit clean, next lint clean, prettier
  • root-cause подтверждён прод-замерами (smooth no-op vs auto works; scrollspy stuck)
  • post-deploy: клик по nav-пунктам → мгновенный точный прыжок к секции; скролл → активный пункт трекает секцию (вкл. §7 внизу)

Refs #958.

## Summary Follow-up к [#2104](https://git.gendsgn.ru/lekss361/gendesign/pulls/2104). Скриншот-верификация **с интеракциями** на проде вскрыла два бага навигации (прод-замеры через `javascript_tool`): 1. **Прыжок не работал.** `window.scrollTo({behavior:"smooth"})` — **no-op** на этой странице: подтверждено замером (`{top:8000, behavior:"smooth"}` → scrollY остался 0; `{behavior:"auto"}` → сработал). Тяжёлый отчёт (Leaflet-карты, async §6 ~20-40с, lazy-чарты) даёт непрерывный reflow, отменяющий smooth-анимацию. Это и есть исходная жалоба «навигация не прыгает» — оригинальный код тоже был `scrollIntoView({behavior:"smooth"})`. → **`behavior:"auto"`** (instant). 2. **Scrollspy не трекал.** Узкая IntersectionObserver-полоса (`rootMargin -72px/-60%`) пуста для высокой/нижней секции → `if(next)` держал старое значение (на §7 активной оставалась «1. Информация», замер: scrollY 12848 → activeNav «1. Информация»). → **scroll-position подход** (rAF-throttled): активна последняя секция, чья верхушка прошла offset-линию; на низу страницы форсим последнюю секцию. Детерминированно, никогда не «пусто». ## Test plan - [x] `tsc --noEmit` clean, `next lint` clean, prettier - [x] root-cause подтверждён прод-замерами (smooth no-op vs auto works; scrollspy stuck) - [ ] post-deploy: клик по nav-пунктам → мгновенный точный прыжок к секции; скролл → активный пункт трекает секцию (вкл. §7 внизу) Refs #958.
bot-backend added 1 commit 2026-06-30 10:42:49 +00:00
fix(report): instant nav jump + scroll-position scrollspy (#958)
All checks were successful
CI / changes (pull_request) Successful in 8s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Successful in 1m0s
CI / openapi-codegen-check (pull_request) Successful in 1m55s
2a900cf571
Скриншот-верификация PR #2104 с интеракциями вскрыла два бага навигации:

- Прыжок не работал: window.scrollTo({behavior:"smooth"}) — no-op на этой
  тяжёлой странице (Leaflet-карты / async §6 / lazy-чарты дают непрерывный
  reflow, отменяющий smooth-анимацию → страница оставалась на месте). Это и
  есть исходная жалоба «навигация не прыгает» (оригинал тоже был smooth).
  → behavior:"auto" (instant): надёжно, читается как настоящий прыжок.

- Scrollspy не трекал: узкая IntersectionObserver-полоса (-72px/-60%) пуста для
  нижней/высокой секции → if(next) держал старое значение (на §7 активной
  оставалась «1. Информация»). → scroll-position подход (rAF-throttled): активна
  последняя секция, чья верхушка прошла offset-линию; на низу страницы форсим
  последнюю секцию. Детерминированно, никогда не «пусто».
bot-backend merged commit 806428abc9 into main 2026-06-30 10:45:34 +00:00
bot-backend deleted branch fix/report-nav-jump-scrollspy 2026-06-30 10:45:34 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2105
No description provided.