Force page scroll position to top at page refresh in HTML

JavascriptJqueryHtmlPageloadPage Refresh

Javascript Problem Overview


I am building a website which I am publishing with divs. When I refresh the page after it was scrolled to position X, then the page is loaded with the scroll position as X.

How can I force the page to be scrolled to the top on page refresh?

  • What I can think of is of some JS or jQuery run as onLoad() function of the page to SET the pages scroll to top. But I don't know how I could do that.

  • A better option would be if there is some property or something to have the page loaded with its scroll position as default (i.e. at the top) which will be kind of like page load, instead of page refresh.

Javascript Solutions


Solution 1 - Javascript

For a simple plain JavaScript implementation:

window.onbeforeunload = function () {
  window.scrollTo(0, 0);
}

Solution 2 - Javascript

You can do it using the scrollTop method on DOM ready:

$(document).ready(function(){
    $(this).scrollTop(0);
});

Solution 3 - Javascript

The answer here does not works for safari, document.ready is often fired too early.

Ought to use the beforeunload event which prevent you form doing some setTimeout

$(window).on('beforeunload', function(){
  $(window).scrollTop(0);
});

Solution 4 - Javascript

Again, best answer is:

window.onbeforeunload = function () {
    window.scrollTo(0,0);
};

(thats for non-jQuery, look up if you are searching for the JQ method)

EDIT: a little mistake its "onbeforunload" :) Chrome and others browsers "remember" the last scroll position befor unloading, so if you set the value to 0,0 just before the unload of your page they will remember 0,0 and won't scroll back to where the scrollbar was :)

Solution 5 - Javascript

To reset window scroll back to top, $(window).scrollTop(0) in the beforeunload event does the tricks, however, I tested in Chrome 80 it will go back to the old location after the reload.

To prevent that, set the history.scrollRestoration to "manual".

//Reset scroll top

history.scrollRestoration = "manual";

$(window).on('beforeunload', function(){
      $(window).scrollTop(0);
});

Solution 6 - Javascript

Check the jQuery .scrollTop() function here

It would look something like

$(document).load().scrollTop(0);

Solution 7 - Javascript

You can also try

$(document).ready(function(){
    $(window).scrollTop(0);
});

If you want to scroll at x position than you can change the value of 0 to x.

Solution 8 - Javascript

The JS history API has the scrollRestoration property, which when set to manual, prevents the last scroll location on the page to be restored:

if (history.scrollRestoration) {
    history.scrollRestoration = 'manual';
} else {
    window.onbeforeunload = function () {
        window.scrollTo(0, 0);
    }
}

Solution 9 - Javascript

Instead of location.reload(), simply use location.href = location.href. It will not scroll to the previous position as location.reload() does.

Note: This will not reload if there is any # in the URL

Solution 10 - Javascript

<script> location.hash = (location.hash) ? location.hash : " "; </script>

Put the above script in <head> tag of your html. Not sure how single page apps behave! But sure works like charm in regular pages.

Solution 11 - Javascript

The answer here(scrolling in $(document).ready) doesn't work if there is a video in the page. In that case the page is scrolled after this event is fired, overriding our work.

Best answer should be:

$(window).on('beforeunload', function(){
	$(window).scrollTop(0);
});

Solution 12 - Javascript

$(document).ready(function(){
    $(window).scrollTop(0);
});

did not work for me as google chrome would just scroll back down after the page finished loading. What I used was

$(document).ready(function() {
	var url = window.location.href;
    console.log(url);
    if( url.indexOf('#') < 0 ) {
		window.location.replace(url + "#");
    } else {
    	window.location.replace(url);
    }
});

// This loads the page with a # at the end. So it will always load at the top.

Solution 13 - Javascript

This is one of the best way to do so:

<script>
$(window).on('beforeunload', function() {
  $('body').hide();
  $(window).scrollTop(0);
});
</script>

Solution 14 - Javascript

I found that these CSS styles force the page to always scroll to top on reload/refresh:

html {
    height: 100%;
    overflow: hidden;
    width: 100%;
}

body {
    height: 100%;
    overflow-x: hidden;
    overflow-y: auto;
    width: 100%;
}

Solution 15 - Javascript

You can use location.replace instead of location.reload:

location.replace(location.href);

This way page will reload with scroll on top.

Solution 16 - Javascript

The supercalifragilisticexpialidocious answer is:

add this at the top of your js file or script tag

document.documentElement.scrollTop = 0; // For Chrome, Firefox, IE and Opera

document.body.scrollTop = 0; // For Safari

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMoonView Question on Stackoverflow
Solution 1 - JavascriptProfNandaaView Answer on Stackoverflow
Solution 2 - JavascriptPatView Answer on Stackoverflow
Solution 3 - JavascriptBenView Answer on Stackoverflow
Solution 4 - JavascriptxoxelView Answer on Stackoverflow
Solution 5 - JavascriptAlex Having FunView Answer on Stackoverflow
Solution 6 - Javascriptjon3lazeView Answer on Stackoverflow
Solution 7 - JavascriptAnkitView Answer on Stackoverflow
Solution 8 - JavascriptPecataView Answer on Stackoverflow
Solution 9 - JavascriptNauphalView Answer on Stackoverflow
Solution 10 - Javascriptharshes53View Answer on Stackoverflow
Solution 11 - JavascriptDrPollit0View Answer on Stackoverflow
Solution 12 - JavascriptDautView Answer on Stackoverflow
Solution 13 - JavascriptBlitzView Answer on Stackoverflow
Solution 14 - JavascriptcenthousView Answer on Stackoverflow
Solution 15 - JavascriptFernandoView Answer on Stackoverflow
Solution 16 - JavascriptNicobelsView Answer on Stackoverflow