Как сохранить всю позицию прокрутки страницы после асинхронной обратной передачи - PullRequest
1 голос
/ 16 октября 2010

я использую asp.net 4.0 iis 7.5 Microsoft Visual Studio 2010

я хочу сохранить позицию прокрутки всей страницы (браузера) (не div или панель) при асинхронной обратной передаче (панель обновления)

как я могу это сделать

на самом деле у меня была функция, которая может сохранять положение полосы прокрутки div после обратной передачи, как это

       <script type="text/javascript">
        var xPos, yPos;
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_beginRequest(BeginRequestHandler);
        prm.add_endRequest(EndRequestHandler);
        function BeginRequestHandler(sender, args) {
            xPos = document.getElementById('Main').scrollLeft;
            yPos = document.getElementById('Main').scrollTop;
        }
        function EndRequestHandler(sender, args) {
            document.getElementById('Main').scrollLeft = xPos;
            document.getElementById('Main').scrollTop = yPos;
        }
    </script>

но я не смог найти идентификатор полосы прокрутки браузера, чтобы получить его значения для получения с document.getElementById

спасибо за ответы

Ответы [ 3 ]

1 голос
/ 22 ноября 2014

Я нашел это здесь: http://forums.asp.net/t/1300961.aspx

просто добавьте его сразу после менеджера скриптов.у меня работает во всех браузерах

<script type="text/javascript">
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    prm.add_beginRequest(beginRequest);
    function beginRequest()
    {
        prm._scrollPosition = null;
    }
</script>
1 голос
/ 16 октября 2010

asp.net имеет свойство директивы @page с именем <a href="http://msdn.microsoft.com/en-us/library/system.web.ui.page.maintainscrollpositiononpostback.aspx" rel="nofollow">MaintainScrollPositionOnPostBack</a>

надеюсь, это поможет

0 голосов
/ 08 декабря 2014

Вы можете сделать это клиентским способом:

$(document).ready(function () {
    $(window).on('beforeunload', function () {
        document.cookie = "keepscroll=" + $(window).scrollTop();
    });
    var cs = document.cookie ? document.cookie.split(';') : [];
    var i = 0, cslen = cs.length;
    for (; i < cs.length; i++) {
        var c = cs[i].split('=');
        if (c[0].trim() == "keepscroll") {
            $(window).scrollTop(parseInt(c[1]));
            break;
        }
    }
});

Если вы не являетесь другом jQuery, вы можете попробовать что-то вроде:

window.onbeforeunload = function () {
    document.cookie = "keepscroll=" + document.body.scrollTop;
};
var keepscroll = window.setTimeout(function () {
    var cs = document.cookie ? document.cookie.split(';') : [];
    var i = 0, cslen = cs.length;
    for (; i < cs.length; i++) {
        var c = cs[i].split('=');
        if (c[0].trim() == "keepscroll") {
            window.scrollTo(0, parseInt(c[1]));
            break;
        }
    }
    window.clearTimeout(keepscroll);
    keepscroll = null;
}, 100);
...