Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to reset scroll position on a route change?

Tags:

I spend my first couple of hours with Angular JS and I am trying to write a SPA with it. However, on changing route, the scroll position remains at its current position after changing routes. This means that if someone read through half of the text on page two, this person will end up in the middle of page when two after changing to the second page. (Given that the pages are equally long.)

When I look for solutions I only find people asking for the opposite, i.e. they do not want to change the scrolling position once they change pages. However, I failed to reproduce even that. I wonder if the development of Angular JS got ahead of this and the sources I consulted were outdated.

I created a minimal version that demonstrates my problem (simply add two files sample1.html and sample2.html with random content to make it work.):

<!DOCTYPE html> <html> <head lang="en"><title>SPA sample</title></head> <body data-ng-app="myApp"> <div style="position: fixed;">   <a href="#/">Main</a>   <a href="#/other">Tutorial</a> </div> <div data-ng-view=""></div> <script src="http://code.angularjs.org/1.2.9/angular.min.js"></script> <script src="http://code.angularjs.org/1.2.9/angular-route.min.js"></script> <script>     var myApp = angular.module('myApp', ['ngRoute']);     myApp.config(function ($routeProvider) {         $routeProvider                 .when('/', {                     controller: 'noOp',                     templateUrl: 'sample1.html'                 })                 .when('/other', {                     controller: 'noOp',                     templateUrl: 'sample2.html'                 })                 .otherwise({redirectTo: '/'});     });     myApp.controller('noOp', function ($scope) { }); </script> </body> </html> 
like image 743
Rafael Winterhalter Avatar asked Apr 01 '14 07:04

Rafael Winterhalter


People also ask

How do you control the scroll position?

To get or set the scroll position of an element, you follow these steps: First, select the element using the selecting methods such as querySelector() . Second, access the scroll position of the element via the scrollLeft and scrollTop properties.

What is scroll restoration?

Scroll restoration refers to the scrollRestoration property on the History API. This property allows restoring a user's scroll position when navigating to a new page.


1 Answers

As per the ngView documentation:

autoscroll(optional) string:

Whether ngView should call $anchorScroll to scroll the viewport after the view is updated.

So all you have to do is change your ng-view call to turn on autoscroll like so:

<div ng-view autoscroll></div> 
like image 166
Matt Way Avatar answered Sep 22 '22 09:09

Matt Way