我有一个asp:表格里面的div。如何在每次回发时保持其滚动位置?
commit
我在Page指令中尝试了MaintainScrollPositionOnPostback = true无济于事。我也在PageLoad中尝试过Page.MaintainScrollPositionOnPostback = true而且没有用。我还尝试了一堆来自Stackoverflow的JS脚本,但没有任何效果。
感谢。
答案 0 :(得分:1)
特别难以回答,因为我对所提供的页面结构没有太多的了解,但作为一个广泛的猜测,我说我是将jQuery和ASP.NET结合起来 - 使用jQuery跟踪滚动,将其写入.NET输入隐藏字段,然后在页面重新加载时重新应用它。
您可能需要对其进行调整以满足实际文档的需要,但我正在考虑这些方面的内容。 (注意:如果您想要在页面中滚动,而不是在特定div中,请参阅本答案末尾的注释。)
首先,对于主要的div,我假设你有类似的东西:
<div id="container" style="overflow-y:auto;">
...以便div的内容可以垂直滚动。使用该假设,下一个添加将是页面中的隐藏字段:
<asp:HiddenField ID="tScroll" runat="server" value="0" />
当页面首次加载时,默认值为0。最后,使用jQuery跟踪滚动位置,并在重新加载页面并触发文档就绪步骤时重新应用跟踪的滚动位置:
$(document).ready(function() {
$("#container").scrollTop($("#tScroll").val()); // this sets the scroll position
$("#container").scroll(function() {
$("#tScroll").val($(this).scrollTop());
});
});
但是,如果页面加载时div和table 可见,当div最初出现在其正常位置时,你会得到一瞬间的混蛋,然后跳转到滚动的位置。相反,您可以使用jQuery animate函数执行平滑回滚,并将该行替换为:
$("#container").animate({ scrollTop: $("#tScroll").val() + 'px' }, 500);
...根据需要将500调整为更大或更小。这样,div就会自动回滚到你需要的位置。
我无法判断这是否完全符合您的需求,但希望它至少应该指向正确的方向。
对此的补充:如果您希望维护页面滚动,而不是特定div中的滚动,则逻辑是相同的,但您要跟踪并且引用几个不同的值,基本如下:
$('html,body').animate({ scrollTop: $("#tScroll").val() }, 500);
$(window).scroll(function(e) {
...
...其余的脚本保持在同一行。在任何一种情况下,您都可以选择是使用动画还是直接使用scrollTop赋值。