AngularJSを使用して、サファリのみの奇妙なスクロール動作をしています。
ユーザーがページを切り替えるたびに、ページはあたかもAJAXであるかのように変更されます。 AngualrJSにあることは理解していますが、結果として生じる動作は、ユーザーがページを切り替えたときにブラウザーが上にスクロールしないことです。
新しいコントローラーが使用されているときはいつでもブラウザーを強制的に一番上までスクロールさせようとしましたが、何もしないようです。
すべてのコントローラーの上部で次のJSを実行しています。
document.body.scrollTop = document.documentElement.scrollTop = 0;
これはSafariのみのバグでもあり、ページが変更されると他のすべてのブラウザーが上部にスクロールします。誰かが同様の問題に遭遇したか、それを解決するより良い方法を考えていますか?
$ anchorScroll()を使用してみましたか?文書化されています ここ 。
$window.scrollTo(0,0)
はページの上部までスクロールします。
アニメーションもサポートする素敵なプラグイン(pure angularJS)を見つけました。
これを使用できます:
.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)を使用できます。あなたのコントローラーで
CordovaアプリでAngularJSを使用しているときに同じ問題が発生しました。通常のブラウザまたはAndroidでは問題ありませんが、iosではNeilの説明と同じ動作になります。
$ anchorScrollのAngularJSのドキュメントはそれほど素晴らしいものではないので、このリンクを投稿してもっと役立つようにしたいと思いました。
http://www.benlesh.com/2013/02/angular-js-scrolling-to-element-by-id.html
$ 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();
};
@ nonstopbutton のように、autoscroll="true"
をngView
要素に追加しても機能しました。これは、回答に対するコメントであり、彼の返信を見ることは容易ではなかったため、ここで言及します。
コントローラでは、実際に_$
_をwindow
から削除し、_$window
_をコントローラに挿入することなく単にputwindow.scrollTo(0,0);
することができます。それは私にとって素晴らしい仕事でした。
locationChangeSuccessイベントの後に$ window.scrollTo(0,0);を呼び出します:
$rootScope.$on("$locationChangeSuccess",
function(event, current, previous, rejection) {
$window.scrollTo(0,0);
});
Chromeでも同様の問題があります。ただし、特定の外部ライブラリがこの問題を引き起こしているかどうかはわかりません。
しかし、私はこのコードをアプリレベルで作成しましたが、動作します。
$rootScope.$on('$viewContentLoaded', function(){
$window.scrollTo(0, 0);
});