AngularJS+;Safari:页面切换时强制页面滚动到顶部
我使用AngularJS有一种奇怪的、仅限于safari的滚动行为 每当用户在页面之间切换时,页面都会被更改,就像它们是AJAX一样。我知道它们是AngualrJS格式的,但结果是,当用户切换页面时,浏览器不会滚动到顶部 我曾尝试在使用新控制器时强制浏览器滚动到顶部,但它似乎没有任何作用 我在每个控制器的顶部运行以下JS:AngularJS+;Safari:页面切换时强制页面滚动到顶部,angularjs,safari,Angularjs,Safari,我使用AngularJS有一种奇怪的、仅限于safari的滚动行为 每当用户在页面之间切换时,页面都会被更改,就像它们是AJAX一样。我知道它们是AngualrJS格式的,但结果是,当用户切换页面时,浏览器不会滚动到顶部 我曾尝试在使用新控制器时强制浏览器滚动到顶部,但它似乎没有任何作用 我在每个控制器的顶部运行以下JS: document.body.scrollTop=document.documentElement.scrollTop=0 这也是Safari特有的bug,当页面更改时,其他浏
document.body.scrollTop=document.documentElement.scrollTop=0代码>
这也是Safari特有的bug,当页面更改时,其他浏览器都会滚动到顶部。有没有人遇到过类似的问题或想到了更好的解决方法?您是否尝试过使用$anchorScroll()?这是有记录的。我在Cordova应用程序中使用AngularJS时遇到了同样的问题。在普通浏览器或安卓系统上,我没有问题,但在ios上,我的行为与Neil描述的一样
$anchorScroll上的AngularJS文档不是很好,所以我想发布这个链接,这对我的帮助更大:
$window。滚动到(0,0)
将滚动到页面顶部
我刚刚发现了一个很好的插件(纯angularJS),它还支持动画:
您可以使用$anchorScroll
$scope.gotoTop = function (){
// set the location.hash to the id of
// the element you wish to scroll to.
$location.hash('top');
// call $anchorScroll()
$anchorScroll();
};
您可以使用以下选项:
.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);在您的控制器中,我发现Chrome也存在类似问题。但是,我不知道是否有任何特定的外部库导致了这个问题
然而,我在应用程序级别编写了这段代码,它是有效的
$rootScope.$on('$viewContentLoaded', function(){
$window.scrollTo(0, 0);
});
如前所述,将autoscroll=“true”
添加到我的ngView
元素也对我起了作用。我在这里提到这一点是因为这是对答案的评论,不容易看到他的回答
此处的更多信息:调用$window.scrollTo(0,0)地点更改成功后事件:
$rootScope.$on("$locationChangeSuccess",
function(event, current, previous, rejection) {
$window.scrollTo(0,0);
});
在控制器中,您实际上可以从窗口
中删除$
,只需将窗口滚动到(0,0)代码>而无需将$window
注入控制器。这对我很有效 你能发布更多的代码吗,比如控制器数据,也许是routeProvider的配置设置。。。etcanchorcroll用于滚动到指定的元素,如果您只想滚动到页面顶部,我认为$window。应该使用scrollTo(0,0)。我在搜索解决方案时找到了这个答案:Adding autoscroll=“true”对于我的ngView元素,我认为这个问题的另一个答案可能更适合于许多人:我认为这是最简单的方法,只有$routeChangeStart应该更改为$routeChangeSuccess,这样滚动效果就不可见了。就像这个解决方案一样。谢谢:)将其添加到您的XXX.config我知道这对于中级/高级AngularJS开发人员来说可能是显而易见的,但请记住AngularJS初学者(像我一样):不要忘记在控制器上添加$window
引用,否则它将不起作用。仅供参考,尽管在自述文件中很清楚,但提到的存储库已移动到