代码之家  ›  专栏  ›  技术社区  ›  Furkan Gözükara

异步回发后如何保持整页滚动位置

  •  1
  • Furkan Gözükara  · 技术社区  · 14 年前

    我正在使用asp.net 4.0 iis 7.5 microsoft visual studio 2010

    我该怎么做

    实际上,我有一个函数,可以像这样在回发后保持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>
    

    bu我找不到浏览器滚动条id以获取要使用document.getElementById获取的值

    谢谢你的回答

    3 回复  |  直到 14 年前
        1
  •  1
  •   Prashant Lakhlani    14 年前

    asp.net有一个名为@page directive的属性 MaintainScrollPositionOnPostBack

    希望这会有帮助

        2
  •  1
  •   Ullas    9 年前

    我在这里找到的: 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>
    
        3
  •  0
  •   rodzmkii    10 年前

    你可以用客户的方式:

    $(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);