刷新后div自动滚动到顶部,需要停止自动滚动至顶部。

3

我正在尝试让一个每2秒刷新的div在刷新后停止回到顶部。我有PHP代码和JavaScript。我正在使用的JavaScript代码是:

function at_Ticket_scrollBottom()
{
   var objDiv = document.getElementById("cartTicket");
   objDiv.scrollTop = objDiv.scrollHeight;
}

function at_Tabs_Update()
{

if(div_WPOSVar_IsVisible())
{
    //calling setTimeout without clearing any existing timeout can add multiple calls.
    //IE the normal 2 second sequence, then call at_Tabs_Update two more times, and
    //     now we have 3 timeouts set to call at_Tabs again, etc.
    //This wouldn't be an issue except that we call at_Tabs_Update directly to cause
    //     immediate refresh from many places.
    //So clear the handle everytime to get rid of the last one we set.
    clearTimeout(at_Tabs_Timer);
    at_Tabs_Timer=setTimeout("at_Tabs_Update()", 2*1000); //every 2 seconds
    return;
}
}

在刷新后,如果我向下滚动到票据底部,在下一次刷新后它会跳回到顶部,因此我永远无法在刷新之前到达底部并选择一个项目进行编辑。如何停止自动滚动回顶部。


你是如何刷新这个div的? - Alan
1
我已经添加了一个显示刷新代码的部分,请告诉我是否需要更多。 - Wesley
1
这并没有真正展示在刷新期间发生了什么,只是展示了你如何清除超时。 - invertedSpear
1
一件小事,不要将字符串传递给 setTimeout -- 传递函数引用:setTimeout(at_Tabs_Update, 2000); === 正确做法 - Chris Baker
你好 Chris,感谢你参与这个问题。你知道除了在2秒刷新后停止跳转到div底部之外,还有其他的方法吗? - Wesley
1个回答

1

从这里我收集到的信息来看,你最好在刷新前保存当前滚动位置,并在ajax调用之后滚动到该保存的位置。 使用jQuery的.scrollTop()函数来读取和设置滚动。

以下是一些伪代码以进行说明:

at ajax refresh function
    var curPos $(element).scrollTop();
    ... do ajax call ..
        ajax callback: $(element).scrollTop(curPos);

我不知道在哪里放置这段代码。我正在使用ajax php和javascript编写程序,但是无法确定将此信息放在哪里。 - Wesley
那不是真正的代码,而是伪代码,用于说明该如何做。 - Dominik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接