Gesamtgraph: Box auf Viewport-Höhe begrenzen — Mausrad-Zoom scrollt die Seite mit #131
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#131
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bug/UI (Stefans Feedback zum v0.7.0-Prod-Test, Follow-up zu #123)
Beim Gesamtgraphen (
/p/:pond/graph) ist die Graph-Box so hoch, dass die Seite einen Scrollbalken bekommt — beim Zoomen mit dem Mausrad wird deshalb gleichzeitig mitgescrollt. Die Box soll so groß wie möglich sein, ohne dass die Seite scrollen muss (Viewport-füllend unterhalb von Header/Reglern/Legende).Ursachen (verifiziert):
.force-graph { width: 100%; height: auto }+ festesviewBox800×560 → das SVG skaliert auf Containerbreite und die Höhe folgt dem 800:560-Seitenverhältnis. Auf breiten Fenstern wird der Graph höher als der Viewport → Seiten-Scrollbalken.onWheel— React registriert Wheel-Listener am Root passiv,preventDefault()könnte das Scrollen dort gar nicht verhindern (aktuell wird es nicht mal versucht). Solange die Seite scrollbar ist, scrollt jedes Zoomen mit.Lösungsskizze:
graph-pageals Flex-Spalte über die verfügbare Höhe der Main-Column;graph-page__canvasbekommtflex: 1; min-height: 0, das SVGheight: 100%— Breite/Höhe des Containers messen (ResizeObserver) und als width/height-Props anForceGraphgeben, statt der festen 800×560-Defaults (LocalGraphPanel behält seine festen Maße).svg.addEventListener('wheel', handler, { passive: false })via Ref +preventDefault()), damit auch in anderen Scroll-Kontexten (z. B. kleine Fenster) nie mitgescrollt wird. Bonus: Zoom dabei auf den Mauszeiger zentrieren statt auf die Mitte.Scope-Anpassung (Stefan, per Chat 15.07.): Wenn Punkt 1 (Box passt in den Viewport, kein Seiten-Scrollbalken) umgesetzt ist, braucht das Scrollen beim Zoomen nicht mehr separat verhindert zu werden — die Seitengröße passt dann ja.
→ Umsetzung beschränkt sich auf die Layout-Lösung (Flex-Spalte, Canvas füllt die verfügbare Höhe, Containermaße via ResizeObserver als Props). Der native non-passive wheel-Listener aus Punkt 2 entfällt; bei der Verifikation prüfen wir lediglich, dass nach dem Layout-Fix tatsächlich kein vertikaler Scrollbalken mehr auftritt (auch bei kleineren Fenstern). Der Bonus „Zoom auf den Mauszeiger zentrieren" bleibt optional.
Umgesetzt in
d23e5dc, Scope wie in Kommentar 1187 reduziert (nur Layout):.graph-pageist eine Flex-Spalte mitheight: 100%in der Main-Column,.graph-page__canvasbekommtflex: 1; min-height: 0; ein ResizeObserver misst den Canvas und gibt die Maße als width/height-Props anForceGraph(statt der festen 800×560 — der Graph rendert erst nach der ersten Messung)..graph-page__canvas .force-graph { height: 100% };LocalGraphPanelbehält seine festen Maße. Der non-passive wheel-Listener entfiel wie besprochen — ohne Scrollbalken scrollt das Mausrad nichts mit.Verifiziert: kein vertikaler Overflow bei 1600×900 und 900×600 (
main.scrollHeight - main.clientHeight == 0); graph.spec assertet das jetzt dauerhaft. CI grün auf4f79a81.