有没有办法在jQuery中实现MaintainScrollPositionOnPostBack功能

时间:2010-08-27 13:50:21

标签: asp.net jquery

ASP.NET 2.0具有以下属性MaintainScrollPositionOnPostBack,它可用于维护回发后的浏览器位置。这可以使用jQuery实现,如果是的话怎么样? 我读过一些文章,提到MaintainScrollPositionOnPostBack在Chrome / Safari等浏览器中不起作用。

1 个答案:

答案 0 :(得分:3)

创建ASP隐藏输入字段以存储回发中的位置,将该字段的ClientID传递到下面的代码中:

// client id of the hidden input field
var hiddenInputId = '<%= _myHiddenInputField.ClientID %>';

// store the current scroll position into the input
function storeScrollPosition(){
    $('#'+hiddenInputId)[0].value = scrollPosition();
}

// load the value out of the input and scroll the page
function loadScrollPosition(){
    var curPosition = $('#'+hiddenInputId)[0].value;
    if (curPosition > 0)
        $(window).scroll(curPosition);
}

// determine the scroll position (cross browser code)
function scrollPosition() {
    var n_result = window.pageYOffset ? 
                   window.pageYOffset : 0;
    var n_docel = document.documentElement ? 
                  document.documentElement.scrollTop : 0;
    var n_body = document.body ? 
                 document.body.scrollTop : 0;
    if (n_docel && (!n_result || (n_result > n_docel)))
        n_result = n_docel;
    return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

// on load of the page, load the previous scroll position
$(document).ready(function(){loadScrollPosition();});
// on scroll of the page, update the input field
$(window).scroll(function(){storeScrollPosition();});

这仅适用于回发。如果您需要始终拥有相同的屏幕位置,我们可以使用cookies:)