Я делаю свое портфолио как одностраничное приложение, однако, когда я прокручиваю вниз и нажимаю на другую страницу, оно начинается не сверху, как обычный веб-сайт, а с середины страницы.Так что, если я прокручиваю вниз первую страницу и нажимаю на ссылку, которая перенаправляет меня на новую страницу, то как далеко я был на последней странице, то есть как далеко я вниз на новой странице.Как это исправить?
Я хочу, чтобы, когда я нажимаю на ссылку на новую страницу, я вскочил и начал в начале страницы.
Я понимаю, что он находится в том же HTML-документе, поэтому браузер не знает, что это новая страница, поэтому я должен сказать об этом, но как?
Javascript:
const app = {
pages: [],
show: new Event('show'),
init: function(){
app.pages = document.querySelectorAll('.page');
app.pages.forEach((pg)=>{
pg.addEventListener('show', app.pageShown);
})
document.querySelectorAll('.nav-link').forEach((link)=>{
link.addEventListener('click', app.nav);
})
history.replaceState({}, 'Home', '#home');
window.addEventListener('popstate', app.poppin);
},
nav: function(ev){
ev.preventDefault();
let currentPage = ev.target.getAttribute('data-target');
document.querySelector('.active').classList.remove('active');
document.getElementById(currentPage).classList.add('active');
console.log(currentPage)
history.pushState({}, currentPage, `#${currentPage}`);
document.getElementById(currentPage).dispatchEvent(app.show);
},
pageShown: function(ev){
console.log('Page', ev.target.id, 'just shown');
let h1 = ev.target.querySelector('h1');
h1.classList.add('big')
setTimeout((h)=>{
h.classList.remove('big');
}, 1200, h1);
},
poppin: function(ev){
console.log(location.hash, 'popstate event');
let hash = location.hash.replace('#' ,'');
document.querySelector('.active').classList.remove('active');
document.getElementById(hash).classList.add('active');
console.log(hash)
//history.pushState({}, currentPage, `#${currentPage}`);
document.getElementById(hash).dispatchEvent(app.show);
}
}
document.addEventListener('DOMContentLoaded', app.init);
CSS:
.page {
display: none;
width: 100%;
min-height: 100%;
position: absolute;
}
.active {
display: block;
}