即使在使用javascript重新加载后,也要保留滚动条的位置
Retain scrollbar position even after reloading using javascript
我有一个要求,如果我点击复选框,就会提交值,从而重新加载页面。现在,要点击另一个复选框,我需要再次向下滚动,这不是一个更好的主意。所以,现在我想保留我的滚动条位置,即使页面被重新加载。javascript中有什么方法可以做到这一点吗?我试过下面的代码,但没有成功。
<input type="checkbox" onclick="myFunction()"/> One <br/>
function myFunction() {
document.body.scrollTop = 500px;
}
我也浏览了很多网站,但对我来说什么都不起作用。请帮我解决这个问题。
谢谢。
您可以使用会话存储来存储位置,然后在重新加载页面时返回到该位置,如下所示:
$(window).scroll(function() {
sessionStorage.scrollTop = $(this).scrollTop();
});
$(document).ready(function() {
if (sessionStorage.scrollTop != "undefined") {
$(window).scrollTop(sessionStorage.scrollTop);
}
});
这是JSFiddle演示
设置scrollTop
确实可以做到这一点(在大多数浏览器中,您在documentElement
上设置它,但在其他浏览器中,在body
上设置它;最简单的方法是在两者上都设置它)。此外,该值是一个数字(无px
)。
但您必须在正确的时间执行,也就是页面重新加载后的,可能在setTimeout
之后,甚至在onload
回调中(您需要进行实验以确定哪一个在您的页面上有效)。以下是setTimeout
示例:
setTimeout(function() {
document.documentElement.scrollTop =
document.body.scrollTop = 500;
}, 0);
但是,我不会那样做。相反,我会通过ajax提交复选框值,而不重新加载页面。即使你在重新加载后向下滚动到用户所在的位置,当你选中一个框时,页面重新加载仍然是一个惊喜(我记得亚马逊过去是怎么做的),这需要时间。Ajax会让它在后台发生,而不会干扰用户。
创建这样的行为不是一个好的UI实践,如果您想在切换复选框后立即通知服务器,则应该尝试使用AJAX。如果您希望将其他元素的响应作为一组发送到服务器,也可以简单地使用html表单。
以防万一,如果您仍然想实现该功能,则上述代码将不起作用,因为页面一重新加载,整个dom就会重新加载。这仍然可以使用cookie或本地存储来实现,您可以在其中设置滚动的标志或值(整数)。在页面加载时,检查是否有任何值设置为该特定cookie或localStorage变量,然后滚动到给定值请注意,就UI而言,这是一种非常糟糕的做法。我强烈建议您使用ajax或使用表单一起提交值。
- jquery:将动画绑定到滚动条位置的更好方法
- javascript/获取滚动条位置的回调
- 在结束请求上设置多个滚动条位置
- 单击链接后如何更改滚动条位置
- 在 CodeMirror 中设置给定行号处的滚动条位置
- 动态显示除法取决于另一个除法的滚动条位置
- 如何使用硒 IDE 识别滚动条位置
- 如何设置滚动条位置
- 正在恢复<text区域>重新加载页面上的滚动条位置
- 使用jquery保留滚动条位置
- 如何使用jquery或javascript更改光标位置或滚动条位置
- 将水平滚动条位置设置为最右侧
- 如何:使用滚动条重置分割内的滚动条位置
- 当按下后退键转到其他页面时,滚动条位置不会重置
- 返回主视图后,移除徽标问候并固定滚动条位置
- 在相对位置中获取滚动条位置
- 防止firefox在溢出元素改变时重置滚动条位置
- 使用javascript/jquery (jqgrid)维护滚动条位置
- 如果在弹性滚动条弹跳时改变了DOM,则滚动条位置会跳转
- 默认滚动条位置