AngularJS + Safari: Force page to scroll to top when pages switch
我在使用AngularJS时出现了一种奇怪的,仅包含Safari的滚动行为。
每当用户在页面之间切换时,页面就会像AJAX一样被更改。 我了解它们在AngualrJS中,但是导致的行为是,当用户切换页面时,浏览器不会滚动到顶部。
我试图强迫浏览器在使用新控制器时滚动到顶部,但是似乎没有任何作用。
我在每个控制器的顶部运行以下JS:
这也是一个仅限Safari的错误,页面更改时,其他所有浏览器都会滚动到顶部。 有没有人遇到过类似的问题或想过更好的解决方法?
我刚刚找到了一个不错的插件(纯angularJS),它也支持动画:
https://github.com/durated/angular-scroll
您可以使用此:
1 2 3 4 5 | .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 }}]) |
或对于选项卡开关,您可以使用$ window.scrollTo(0,0);在您的控制器中
您是否尝试过使用$ anchorScroll()?它记录在这里。
您可以使用$ anchorScroll
1 2 3 4 5 6 7 8 | $scope.gotoTop = function (){ // set the location.hash to the id of // the element you wish to scroll to. $location.hash('top'); // call $anchorScroll() $anchorScroll(); }; |
在Cordova应用程序中使用AngularJS时遇到相同的问题。在普通的浏览器或Android上,我没有问题,但在ios上,我得到的行为与Neil所述相同。
$ anchorScroll上的AngularJS文档不是很好,所以我想发布此链接可以帮助我做更多的事情:
http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html
就像@nonstopbutton所说的那样,将
此处提供更多信息:https://stackoverflow.com/a/24549173/1578861
在控制器中,您实际上可以将
调用$ window.scrollTo(0,0);在locationChangeSuccess事件之后:
1 2 3 4 | $rootScope.$on("$locationChangeSuccess", function(event, current, previous, rejection) { $window.scrollTo(0,0); }); |
我在Chrome中遇到了类似的问题。但是,我不知道是否有任何特定的外部库导致此问题。
但是,我在应用程序级别编写了这段代码,并且可以正常工作。
1 2 3 | $rootScope.$on('$viewContentLoaded', function(){ $window.scrollTo(0, 0); }); |