Существует более одного решения для этого , потому что это довольно много кода для такого вопроса.
одним из решений было бы добавить эту строку в ваш showHome
функция
function showHome() {
visible = true;
requestAnimationFrame(() => window.scrollTo(0,100)); // That's the line
}
КАК ЭТО РАБОТАЕТ:
Причина, по которой это решение работает, состоит в том, что вы ставите все приложение в переменную visible
, поэтому после установки visible = true;
приложение еще не обновлено, и поэтому вызов window.scrollTo
немедленно приведет к прокрутке до ссылки sh. таким образом, размещение его внутри requestAnimationFrame
будет ждать следующего перерисовки DOM, делая прокрутку только после обновления DOM.
Другое решение все равно потребует requestAnimationFrame
, нет избегая его использования. Для этого потребуется создать реактивный оператор, подобный следующему:
$: if (visible) requestAnimationFrame(() => window.scrollTo(0,100));
Таким образом, ваше приложение всегда будет знать, когда следует изменить прокрутку на основе значения переменной visible
.
Я думаю, что вы следует go со вторым решением, он более стабилен при будущих изменениях.
Чтобы узнать больше о requestAnimationFrame
и о том, как его использовать: https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame