У меня есть ссылка в моей навигационной панели, которая при нажатии перенаправляет вас на домашнюю страницу и прокручивает до определенного раздела с помощью идентификатора. Когда я вызываю функцию по щелчку ссылки, она направляется на новую страницу, но никуда не прокручивается. Поскольку функция должна быть асинхронной, она не будет делать то, что я пытаюсь сделать.
Мой HTML
<a id="categoryButton"><li>Categories</li></a>
<!-- further down the page -->
<div id="categoryTitleDiv"><h1 id="categoryTitle">Where I want to scroll to</h1></div>
Мой JS
document.getElementById("categoryButton").onclick = function onCategoryButtonClick() {
window.location.href = "</*my page address*/";
document.getElementById("categoryTitleDiv").scrollIntoView();
}
Проблема в том, что, поскольку они синхронны, команды выполняются одновременно. Поэтому я попал на нужную страницу с window.location.href = "</*my page address*/";
, но нигде не прокручиваю.
Затем я попытался узнать об Обещаниях, но я не уверен, что делаю это правильно. Я ДЕЙСТВИТЕЛЬНО думал, что это сработает, но это оставляет меня с той же проблемой, что и раньше. Кажется, они по-прежнему работают синхронно, и я просто перейду на новую страницу.
document.getElementById("categoryButton").onclick = function() {
const promise = new Promise(function onCategoryButtonClick(resolve, reject) {
const clickedVar = true;
if (clickedVar) {
window.location.href = "/*my page address*/";
console.log("yay");
resolve();
} else {
console.log("nay");
reject();
}
});
promise.then(function(){
document.getElementById("categoryTitleDiv").scrollIntoView();
}, function(){
console.log("What the heck happened?");
});
}
Я также протестировал несколько других вещей, таких как setTimeout (хотя это не идеально), но это не помогло работать тоже. Я думаю, потому что он хотел прокрутить часть оригинальной страницы, а не недавно загруженную страницу. Но я не очень хорош в Javascript, поэтому я, вероятно, очень неправ. Еще я попробовал вызвать функцию window.onload и использовать ее для выполнения кода прокрутки, но это привело к тому же результату, что и ко всем остальным, я попал на страницу, но она не прокручивалась нигде. Вот код для этого
window.location.href = "/*my page address*/";
window.onload = function(){
document.getElementById("categoryTitleDiv").scrollIntoView();
}
}
В целом, я очень расстроен и не могу понять это на всю жизнь. Спасибо всем, будьте в безопасности!