2015-10-19 63 views
19

我在使用angularjs應用程序滾動時遇到問題。按下後退按鈕轉到其他頁面時,滾動位置不會重置

目前有2頁:第一頁是客戶列表,你可以選擇其中之一,並看到它的細節。第二個是公司名單,它以相同的方式工作。

我使用的是面板使用它們之間$location.path()導航。該應用程序還有一個後退按鈕,使用$window.history.back()

當您選擇在客戶或公司列表中的項目之一,和之後,當你按下按鈕回到你與恢復滾動位置返回到上一個頁面(客戶或公司的列表)。我使用標準$window.history.back()功能,沒有實現任何自定義。

但這裏是哪裏出現問題:如果沒有在任何方向滾動只需進入另一頁(以項目的其他列表)滾動位置不會重置。但是如果你只是滾動一下,它的位置就會重置。此外,如果你不使用後退按鈕一切正常。

所以,問題是:我們如何可以重置滾動位置使用$window.history.back()後轉到另一個頁面時?

我也使用infinite-scroll插件,如果它很重要。但即使當我關掉它,沒有任何改變,所以我猜這個問題不在插件中。

+0

你嘗試<身體自動滾屏=「真」>? –

+0

我有,這並沒有太大的幫助... – renchan

+0

你想要滾動位置在瀏覽到新頁面的頂部嗎? – Guillaume

回答

2

我曾經有過類似的問題,並想出簡單的(但不是優雅的解決方案)。

當視圖更改時,我在存儲區中存儲了包裝器的scrolltop值。返回時,我再將這個值應用於包裝。

其實我不記得它是如何在單擊back back broswer按鈕時表現的。你需要檢查。


更改視圖和存儲scrollTop的值 https://github.com/jedrzejchalubek/Reed/blob/master/src/app/controller/all.js#L20

angular.extend($scope.view, { 
    panel: false, 
    section: 'single', 
    single: el, 
    scrollPosition: $('#thumbs').scrollTop() 
}); 

回去和重新scrollTop的值 https://github.com/jedrzejchalubek/Reed/blob/master/src/app/directives/back-to-list.js#L14

scope.$apply(function() { 
    scope.view.section = 'list'; 
    scope.view.panel = false; 
}); 
$('#thumbs').scrollTop(scope.view.scrollPosition); 

項目在GitHub上,這樣你就可以對其進行掃描。也許這有幫助。 https://github.com/jedrzejchalubek/Reed

0

如果控制器被封裝在Immediately Invoked Function Expression中,您可以通過觸發控制器啓動功能來捕獲重新加載事件。像這樣:

(function() { 


angular.module("pstat") 
     .controller("homeCtrl", homeCtrl); 

    homeCtrl.$inject = ['$log', 'dataService', 'localStorageService', '$http']; 
    function homeCtrl ($log, dataService, localStorageService, $http) { 
    var vm = this; 
    $(document).getElementById("yourId").scrollTop(0); 

    }); 
})() 

這將迫使頁有0垂直滾動當控制器初始化偏移,在此頁面上的$ window.history.back事件到達即。

-1

這是我已經從AngularJS教程加入到著名的phonecatApp和它的作品:

phonecatApp.run(function($rootScope, $window) { 
     $rootScope.$on('$viewContentLoaded', function(){ 
      $(document).ready(function(){ window.scrollTo(0, 0); }); 
     }); 
    }); 
相關問題