Javascript 根据ajax请求保持滚动位置

Javascript 根据ajax请求保持滚动位置,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一个有很多容器的单页网站 每个容器的内容都是通过ajax异步加载的,这意味着不是每个容器都同时填充数据 容器具有动态高度:自动 该网站由智能路由系统控制。如果您输入特定的url,网站将在加载时滚动到给定的元素 如何滚动到一个容器(例如容器5)并使该容器保持在相同的滚动位置?当其他容器正在加载时,应该可以通过用户滚动来更改该位置?如果容器有固定的高度,整个过程不会出现任何问题,但此时,每次装载或更改这些容器时,滚动位置都会发生变化 你知道解决这个问题的插件或好方法吗 问题的例子: 预期结果:

我有一个有很多容器的单页网站

每个容器的内容都是通过ajax异步加载的,这意味着不是每个容器都同时填充数据

容器具有动态高度:自动

该网站由智能路由系统控制。如果您输入特定的url,网站将在加载时滚动到给定的元素

如何滚动到一个容器(例如容器5)并使该容器保持在相同的滚动位置?当其他容器正在加载时,应该可以通过用户滚动来更改该位置?如果容器有固定的高度,整个过程不会出现任何问题,但此时,每次装载或更改这些容器时,滚动位置都会发生变化

你知道解决这个问题的插件或好方法吗

问题的例子:

预期结果:

滚动至容器10并保持在此容器上的滚动位置,即使其他容器未完全加载

一旦每个容器都加载了固定的高度,滚动就可以毫无问题地工作了

您可以使用offsetHeight来获取元素的高度。在您的例子中,您可以在ajax请求中检查div的高度,然后使用scrollBy,如下所示

xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState != 4) return
        if (xmlhttp.status == 200) {
            //do some stuff you need

            var scroll_value = document.getElementById('div_that_loaded').offsetHeight();
            window.scrollBy(0,scroll_value);
            }
        }

您是否可以限制容器的高度,然后用户溢出:滚动,以便用户可以在每个容器内滚动以查看所有内容?这是不可能的,容器必须具有动态高度。您是否考虑过在容器1-9中的图像中添加宽度和高度属性,就像推荐的规格一样?那么我想你只需要等到所有的内容都呈现出来后再滚动。我们不可能提前知道它的高度,特别是因为它可能会根据浏览器、屏幕大小等发生很大的变化。@Brian即使我这样做,内容也是通过Ajax加载的,而且大小也不尽相同……嗯,有趣的想法。。。在背景图像和其他元素中加载容器的全部内容时,以及在加载全部内容后,显示并重置滚动位置时,是否可以显示固定高度和其他内容?如果是的话,我怎么能做到这一点?只是等待的东西,其他我自己能做的事情?@JakeParis是的,他的解决方案不起作用,但如果你反转scroll_value变量,它可能会起作用,还是我错了?我相信你有一个函数可以做ajax,所以每次加载div时窗口都会滚动?是的,我有一个函数,它可以通过回调来执行ajax请求事件,但是JS只会滚动窗口一次,这是在页面加载时完成的……我们的想法是在每个div完全加载后立即获得它的高度,这样我们就知道需要向下滚动多少。如果你的div有一些初始高度,你只需要提高scroll\u值
xmlhttp.onreadystatechange=function(){
    if (xmlhttp.readyState != 4) return
        if (xmlhttp.status == 200) {
            //do some stuff you need

            var scroll_value = document.getElementById('div_that_loaded').offsetHeight();
            window.scrollBy(0,scroll_value);
            }
        }