使用jQuery恢复页面滚动位置

时间:2010-01-05 20:54:44

标签: jquery

我的页面操作使用类似:

$('#thetable tbody').replaceWith(newtbody);
在ajax回调中。有时,如果用户向下滚动页面,则此操作具有向上滚动页面的可理解的副作用。但是替换对用户来说似乎是无缝的,因此再次向下滚动有点烦人。由于newtbody通常与它所替换的垂直高度相同,我们应该能够让脚本代替它。

现在,因为我发现执行:

$('body').scrollTop(300);
来自JS调试器控制台的

做了我希望的事情,我认为简单的补救措施是:

var scrollsave = $('body').scrollTop();
$('#thetable tbody').replaceWith(newtbody);
$('body').scrollTop(scrollsave);

但没有快乐。我还没有使用jQuery.ScrollTo

6 个答案:

答案 0 :(得分:40)

我们遇到了完全相同的问题,以下代码效果很好......

var scroll = $(window).scrollTop();
// yada
$("html").scrollTop(scroll);

答案 1 :(得分:26)

var position= $(window).scrollTop();

//some things here

$(window).scrollTop(position);

它在IE8和FF中都适用于我。

答案 2 :(得分:4)

请务必使用return false;来终止您的function(){}构造。

事件触发器可能正在尝试执行目标DOM元素的默认操作,即< a href="" >;

答案 3 :(得分:1)

你使用aspx吗? 如果是aspx:

&#13;
&#13;
$(document).ready(function () {
        //------------ scroll-------------
         
        $('body').scrollTop(document.getElementById('<%=hdScroll.ClientID%>').value);
            
        $(window).scroll(function () {
            $("#<%= hdScroll.ClientID %>").val($(window).scrollTop());
            //alert(document.getElementById('<%=hdScroll.ClientID%>').value);
        });
       });
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
  <asp:HiddenField Id="hdScroll" runat="server"></asp:HiddenField>
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您可以定期检查div outerHeight,并在scrollTop渲染超过滚动值后设置div属性。

var g_Interval ;
var g_ScrollTop ;

function checkAndAdjustScroll() {
    var height=$('#content').outerHeight() ;
    if(height>g_ScrollTop) {
            $(window).scrollTop(g_ScrollTop) ;
            clearInterval(g_Interval) ;
    }
}

每当您使用AJAX内容更新div时,请执行此操作

g_ScrollTop=$(window).scrollTop() ;
g_Interval=setInterval(checkAndAdjustScroll, 100) ;

您可能需要根据div从页面顶部的偏移量进行调整

答案 5 :(得分:0)

尝试使用.html()代替.replaceWith()

$('#thetable tbody').html( newtbody.html() );

我不知道这里可能存在的性能瓶颈,但是当我尝试保留div的滚动位置时,它对我来说是成功的诀窍,而且似乎也可以处理整个页面的滚动位置