У меня есть страница с некоторыми аккордеонами и другим динамическим контентом, и я хочу должным образом сохранить позицию прокрутки пользователя, когда они обновляют страницу. (В противном случае браузер автоматически изогнута обратно в «где они были», что на самом деле является случайной другой позицией, когда аккордеоны еще не открыты.
Код: Выделить всё
history.scrollRestoration = "manual";
document.addEventListener("beforeunload", function () {
var elIdx = myCodeToFindCurrentElementIndex();
//window.location.hash += "_SCROLL=" + elIdx;
history.replaceState(null, "", window.location.hash + "_SCROLL=" + elIdx);
console.log("unload:", window.location.href);
}, false);
console.log("initial:", window.location.href);
myCodeToScrollToElementWithIndex(+location.hash.split("_SCROLL=")[1])
Это регистрирует новый _scroll = как часть URL, который он видит во время обработки выгрузки, и я даже вижу, как он на мгновение мигает на панели инструментов. Но затем исходное
(то есть новое) местоположение. Href , рассматриваемый как обновленный JavaScript, запускается снова, не хватает позднего дополнения. И поэтому он не получает индекса элементов, который он ожидал, чтобы прокрутить обратно. Если я нажимаю/заменяю историю навигационного состояния ранее, оно сохраняется через обновление, но, кажется, может быть, браузер уже имеет в виду URL, который будет обновлен к тому времени, когда эти события увольнятся.
Это правильное понимание того, что происходит? Есть ли способ внести постоянные изменения в историю/место.>
Подробнее здесь:
https://stackoverflow.com/questions/796 ... refreshing