24

AngularJS を使用すると、奇妙な、サファリのみのスクロール動作が発生します。

ユーザーがページを切り替えるたびに、ページは AJAX であるかのように変更されます。それらがAngualrJSにあることは理解していますが、結果として、ユーザーがページを切り替えたときにブラウザが一番上にスクロールしません。

新しいコントローラが使用されているときはいつでもブラウザを強制的に一番上にスクロールしようとしましたが、何もしていないようです。

すべてのコントローラーの上部で次の JS を実行しています。

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

これは Safari のみのバグでもあり、ページが変更されると、他のすべてのブラウザが一番上にスクロールします。誰かが同様の問題に遭遇したか、それを解決するためのより良い方法を考えていますか?

4

9 に答える 9

51

$window.scrollTo(0,0)ページの一番上までスクロールします。

アニメーションもサポートする素敵なプラグイン (純粋な angularJS) を見つけました。

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

于 2014-02-12T16:53:01.050 に答える
3

$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();
};
于 2014-02-17T06:51:34.340 に答える
2

@nonstopbuttonが言ったように、私の要素への追加も私にとってはうまくいきました。これは回答へのコメントであり、彼の回答を見るのは簡単ではなかったので、ここで言及します。autoscroll="true"ngView

詳細はこちら: https://stackoverflow.com/a/24549173/1578861

于 2015-09-14T18:21:42.097 に答える
0

Chromeでも同様の問題がありました。ただし、特定の外部ライブラリがこの問題を引き起こしているかどうかはわかりません。

ただし、このコードをアプリ レベルで作成したところ、機能しました。

 $rootScope.$on('$viewContentLoaded', function(){
                $window.scrollTo(0, 0);
            });
于 2015-05-07T06:48:22.330 に答える
0

コントローラーでは、実際に$fromをドロップして、コントローラーに注入することなくwindow単純に配置できます。それは私にとってうまくいきました。window.scrollTo(0,0);$window

于 2016-09-29T18:18:46.673 に答える