使用 Javascript 更改内容后滚动到 div 的底部

Posted

技术标签:

【中文标题】使用 Javascript 更改内容后滚动到 div 的底部【英文标题】:Scroll to bottom of div after changing contents using Javascript 【发布时间】:2021-10-17 09:56:12 【问题描述】:

由于某种原因,在使用 Ajax 刷新其内容后,滚动到 div 底部的方法对我不起作用。

我认为这个问题与 DOM 的工作方式有关——例如,当它进行更改时,我对 javascript 或 DOM 的了解还不够,无法真正理解这会如何干扰滚动到底部。

所以我认为问题在于何时以及如何调用方法而不是方法本身。任何人都可以建议一种在刷新 div 后滚动到底部的方法吗?

我正在尝试滚动到底部的方法:

方法一:

var element = document.getElementById("chatBox");
    element.scrollTop = element.scrollHeight;

方法二:

document.getElementById('chatBox').scrollIntoView( behavior: 'smooth', block: 'end' );

刷新div的方法:

function refreshDiv()  
if (window.XMLHttpRequest)
  // code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  
else
  // code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  
xmlhttp.onreadystatechange=function()
  
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    
alert("got 200");
document.getElementById("chatBox").innerhtml=xmlhttp.responseText;
alert("will now try to update Scroll");
//FOLLOWING HAS NO EFFECT POSSIBLY BECAUSE DOM HAS NOT YET RETURNED RESULTS
document.getElementById('chatBox').scrollIntoView( behavior: 'smooth', block: 'end' );
    
  
xmlhttp.open("GET","refreshDiv.php,true);
xmlhttp.send();

return;
//THIS ALSO HAS NO EFFECT POSSIBLY AS IT IS AFTER RETURN
document.getElementById('chatBox').scrollIntoView( behavior: 'smooth', block: 'end' );
  

在刷新 div 后调用滚动到底部的正确位置是什么?

【问题讨论】:

【参考方案1】:

使用此脚本滚动到 div 的底部

    var objDiv = document.getElementById("your_div");
objDiv.scrollTop = objDiv.scrollHeight;

【讨论】:

这是有问题的方法1。问题是在哪里以及如何调用它。

以上是关于使用 Javascript 更改内容后滚动到 div 的底部的主要内容,如果未能解决你的问题,请参考以下文章

如何使用CSS和Javascript滚动/关注菜单?

使用jquery向下滚动15%后更改div颜色[关闭]

Ajax 调用 div 替换并滚动到页面顶部

javascript 在更改页面之前自动滚动到页面顶部

JavaScript:在 Chrome 中使用 textarea.setSelectionRange 后滚动到选择

如何在 ios 中使用自动布局更改滚动视图内容大小