Fix: Tagesübung-Scroll via _scrollTarget nach exercises-Load statt fixem Timeout — SW by-v494, APP_VER 471

This commit is contained in:
rene 2026-04-29 11:54:38 +02:00
parent 6d9f4a097e
commit 4c3638c17c
3 changed files with 19 additions and 10 deletions

View file

@ -3,7 +3,7 @@
Router, State-Management, Navigation, Initialisierung.
============================================================ */
const APP_VER = '470'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
const APP_VER = '471'; // ← bei jedem Deploy mit Frontend-Änderungen erhöhen
const App = (() => {

View file

@ -38,6 +38,7 @@ window.Page_uebungen = (() => {
let _badgesData = null; // cached badges from /api/achievements
let _exercisesByTab = {}; // aus API geladen
let _exercisesLoaded = false;
let _scrollTarget = null; // { exercise_id, name } — nach _renderContent() scrollen
// ----------------------------------------------------------
// DATEN
@ -485,14 +486,7 @@ window.Page_uebungen = (() => {
}
if (params.exercise_id || params.name) {
setTimeout(() => {
// Erst per exercise_id suchen (zuverlässig), dann per Name als Fallback
const card = (params.exercise_id
? _container.querySelector(`[data-exercise-id="${CSS.escape(params.exercise_id)}"]`)
: null)
|| _container.querySelector(`[data-exercise-name="${CSS.escape(params.name || '')}"]`);
if (card) card.scrollIntoView({ behavior: 'smooth', block: 'center' });
}, 700);
_scrollTarget = { exercise_id: params.exercise_id || '', name: params.name || '' };
}
// Progress vom Server laden
@ -971,6 +965,21 @@ window.Page_uebungen = (() => {
_bindLogButtons();
_bindNotizButtons();
if (_activeTab === 'ki-trainer') _loadKiTrainerFeedback();
_tryScrollToTarget();
}
function _tryScrollToTarget() {
if (!_scrollTarget) return;
const t = _scrollTarget;
requestAnimationFrame(() => {
const card = (t.exercise_id
? _container.querySelector('[data-exercise-id="' + CSS.escape(t.exercise_id) + '"]')
: null) || _container.querySelector('[data-exercise-name="' + CSS.escape(t.name) + '"]');
if (card) {
card.scrollIntoView({ behavior: 'smooth', block: 'center' });
_scrollTarget = null;
}
});
}
// ----------------------------------------------------------