2013-08-27 85 views
0

我希望頁面滾動到頂部,如果它在我的應用程序的某個頁面上。

它需要在頁面顯示後執行此操作。

我正在使用的代碼:

$('.current-page, #'+desiredPage).toggleClass('current-page') 

if(desiredPage === 'page-search-results'){ 

    $(window).scrollTop(scrollPosition) 

}else{ 

    $(window).scrollTop(0) 

} 

然而,頁面滾動到頂部前一秒類實際上切換拆分(類具有CSS在它顯示頁面)。爲什麼是這樣?以及如何確保它只發生在?

這隻在移動設備上很明顯。

按照意見/答案我試着使用:

$('.current-page, #'+desiredPage).toggleClass('current-page').promise().done(function(){ 

    if(desiredPage === 'page-search-results'){ 

     $(window).scrollTop(scrollPosition) 

    }else{ 

     $(window).scrollTop(0) 

    } 

}); 

,但它仍然發生?

+0

看看這個問題的答案:http://stackoverflow.com/questions/10321393/jquery-function-on-toggleclass-complete。它建議使用'promise()'來確保'toggleClass'已經完成。你可以嘗試使用它,然後一旦完成,調用'scrollTop'。 – lhan

+0

可能的重複http://stackoverflow.com/questions/10321393/jquery-function-on-toggleclass-complete –

+0

這不是重複的,在這種情況下沒有持續時間或動畫,因此不需要回調。發生什麼事是滾動發生在渲染完成之前。我唯一能想到的就是使用一個非常短的setTimeout。 –

回答

0

如果在函數的末尾添加return false;(即,在if/else子句之後),它可能會解決問題?

我一直在摔跤類似的問題,發現在這篇文章的底部提示:

http://chris-spittles.co.uk/jquery-smooth-page-scrolling/

它說,

返回false簡單地阻止瀏覽器執行其默認行爲

對我來說,並在頁面上給出的例子意味着噸雖然,由於你不使用錨點,但切換類,所以我不太確定在這種情況下「默認行爲」是什麼。

希望它有幫助。