Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS+;Safari:页面切换时强制页面滚动到顶部_Angularjs_Safari - Fatal编程技术网

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

AngularJS+;Safari:页面切换时强制页面滚动到顶部,angularjs,safari,Angularjs,Safari,我使用AngularJS有一种奇怪的、仅限于safari的滚动行为 每当用户在页面之间切换时,页面都会被更改,就像它们是AJAX一样。我知道它们是AngualrJS格式的,但结果是,当用户切换页面时,浏览器不会滚动到顶部 我曾尝试在使用新控制器时强制浏览器滚动到顶部,但它似乎没有任何作用 我在每个控制器的顶部运行以下JS: document.body.scrollTop=document.documentElement.scrollTop=0 这也是Safari特有的bug,当页面更改时,其他浏

我使用AngularJS有一种奇怪的、仅限于safari的滚动行为

每当用户在页面之间切换时,页面都会被更改,就像它们是AJAX一样。我知道它们是AngualrJS格式的,但结果是,当用户切换页面时,浏览器不会滚动到顶部

我曾尝试在使用新控制器时强制浏览器滚动到顶部,但它似乎没有任何作用

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

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
引用,否则它将不起作用。仅供参考,尽管在自述文件中很清楚,但提到的存储库已移动到