corrigindo scroll após movimentações e edições das patterns na playlist
Deploy / Deploy (push) Successful in 2m2s Details

This commit is contained in:
JotaChina 2025-12-27 13:25:58 -03:00
parent 0f50cde78c
commit 8c41955e14
1 changed files with 23 additions and 17 deletions

View File

@ -188,9 +188,14 @@ export function renderAudioEditor() {
if (!audioEditor || !existingTrackContainer) return; if (!audioEditor || !existingTrackContainer) return;
// ✅ Salva o scroll atual (senão toda edição “pula” pro início) // ✅ preserva a posição de scroll mesmo recriando o container
const prevScrollLeft = existingTrackContainer.scrollLeft || 0; const prevScrollLeft =
const prevScrollTop = existingTrackContainer.scrollTop || 0; (existingTrackContainer?.scrollLeft ?? 0) ||
(appState.audio?.editorScrollLeft ?? 0);
const prevScrollTop =
(existingTrackContainer?.scrollTop ?? 0) ||
(appState.audio?.editorScrollTop ?? 0);
_ensureGlobalPlaylistSelectionFields(); _ensureGlobalPlaylistSelectionFields();
_installPlaylistKeybindOnce(); _installPlaylistKeybindOnce();
@ -781,6 +786,10 @@ export function renderAudioEditor() {
newTrackContainer.addEventListener("scroll", () => { newTrackContainer.addEventListener("scroll", () => {
const scrollPos = scrollEl.scrollLeft; const scrollPos = scrollEl.scrollLeft;
// ✅ guarda no estado para sobreviver a re-render
appState.audio.editorScrollLeft = scrollPos;
appState.audio.editorScrollTop = scrollEl.scrollTop || 0;
// sincroniza régua com o container // sincroniza régua com o container
const mainRuler = tracksParent.querySelector(".timeline-ruler"); const mainRuler = tracksParent.querySelector(".timeline-ruler");
if (mainRuler && mainRuler.scrollLeft !== scrollPos) { if (mainRuler && mainRuler.scrollLeft !== scrollPos) {
@ -802,8 +811,6 @@ export function renderAudioEditor() {
} }
}); });
// Event Listener Principal (mousedown) // Event Listener Principal (mousedown)
newTrackContainer.addEventListener("mousedown", (e) => { newTrackContainer.addEventListener("mousedown", (e) => {
document.getElementById("timeline-context-menu").style.display = "none"; document.getElementById("timeline-context-menu").style.display = "none";
@ -1375,18 +1382,17 @@ export function renderAudioEditor() {
} }
}); });
// ✅ Restaura o scroll anterior após reconstruir o container // ✅ restaura scroll após reconstruir a DOM (precisa ser após tudo estar no DOM)
// (evita “voltar pro início” depois de mover/redimensionar/deletar) requestAnimationFrame(() => {
try { try {
newTrackContainer.scrollLeft = prevScrollLeft; newTrackContainer.scrollLeft = prevScrollLeft;
newTrackContainer.scrollTop = prevScrollTop; newTrackContainer.scrollTop = prevScrollTop;
// mantém régua alinhada (caso ela suporte scrollLeft) // mantém régua alinhada na mesma posição
const mainRuler = tracksParent.querySelector(".timeline-ruler"); const mainRuler = tracksParent.querySelector(".timeline-ruler");
if (mainRuler) mainRuler.scrollLeft = prevScrollLeft; if (mainRuler) mainRuler.scrollLeft = prevScrollLeft;
} catch (err) { } catch {}
// silencioso: não pode quebrar a DAW });
}
} }