AngularJS + Safari:强制页面在页面切换时滚动到顶部

Nei*_*eil 24 safari angularjs

我使用AngularJS进行奇怪的,仅限safari的滚动行为.

每当用户在页面之间翻转时,页面就会被改变,就好像它们是AJAX一样.我知道他们在AngualrJS中,但最终的行为是当用户切换页面时浏览器不会滚动到顶部.

我试图强制浏览器在使用新控制器时滚动到顶部,但似乎没有做任何事情.

我在每个控制器的顶部运行以下JS:

document.body.scrollTop = document.documentElement.scrollTop = 0;

这也是一个仅限Safari的错误,当页面发生变化时,每个其他浏览器都会滚动到顶部.有没有人遇到过类似的问题或想到更好的解决方法?

Ale*_*x C 50

$window.scrollTo(0,0) 将滚动到页面顶部.

我刚刚发现了一个支持动画的好插件(纯angularJS):

https://github.com/durated/angular-scroll

  • 我知道对于中级/高级AngularJS开发者来说可能是显而易见的,但请记住AngularJS初学者(比如我自己):不要忘记在控制器上添加```$ window```引用,否则它将无效. (5认同)

dan*_*ren 19

你可以用这个:

.run(["$rootScope", "$window", '$location', function($rootScope, $window,  $location) {

    $rootScope.$on('$routeChangeStart', function(evt, absNewUrl, absOldUrl){
        $window.scrollTo(0,0);    //scroll to top of page after each route change
}}])
Run Code Online (Sandbox Code Playgroud)

或者对于制表符开关,你可以使用$ window.scrollTo(0,0); 在你的控制器中

  • 我认为这是最简单的方法,只有$ routeChangeStart应该更改为$ routeChangeSuccess,这样滚动效果将是不可见的. (4认同)

The*_*ter 14

你尝试过使用$ anchorScroll()吗?它在这里记录.

  • 我在寻找解决方案时找到了这个答案:http://stackoverflow.com/a/24549173/1578861在我的ngView元素中添加autoscroll ="true"对我有用:<div class ="ng-view"autoscroll ="true "> </ DIV> (19认同)
  • anchorScroll用于滚动到specefied元素,如果你只想滚动到页面顶部,我认为应该使用$ window.scrollTo(0,0). (17认同)