具体回答有点困难,因为我对所提供的页面结构没有太多了解,但作为一个广泛的猜测,我会说我会为此结合 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 会自动滚动回您需要的位置。
我无法判断这是否完全符合您的需求,但希望它至少可以为您指明正确的方向。
对此的补充:如果您希望维护 page 滚动,而不是特定 div 中的滚动,则逻辑是相同的,但您需要跟踪和引用几个不同的值,基本上如下:
$('html,body').animate({ scrollTop: $("#tScroll").val() }, 500);
$(window).scroll(function(e) {
...
...与脚本的其余部分保持在同一行。无论哪种情况,您都可以选择是使用动画还是直接滚动顶部分配。