You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击$('#openDiv')时div滚动到底部代码失效的问题咨询

问题:点击按钮后无法让隐藏的div滚动到底部?

我一眼就看出问题出在哪了——你是在元素刚被设置为显示的同一时间就执行滚动操作,但浏览器还没完成这个元素的渲染工作,导致scrollHeight的计算结果不对,滚动自然就没效果了。

解决方案:等元素完全显示后再执行滚动

把滚动动画代码放到show()方法的回调函数里,这样就能确保元素已经被浏览器渲染完成,scrollHeight的值是准确的。

修改后的JavaScript代码如下:

$(document).ready(function() {
 $('#openDiv').on('click', function(){
 $('#openDiv').hide();
 $('#closeDiv').show();
 // 把滚动代码放到show的回调里,确保元素完全显示后执行
 $("#mainDiv").show(function() {
   $(this).animate({ scrollTop: $(this).prop("scrollHeight") }, 1000);
 });
 });
 $('#closeDiv').on('click', function(){
 $('#closeDiv').hide();
 $("#mainDiv").hide();
 $('#openDiv').show();
 });
});

为什么原来的代码不行?

当元素处于display:none状态时,它的scrollHeight是无效的(通常为0)。你在调用show()后立刻执行滚动,此时浏览器还没来得及重新计算元素的布局和滚动高度,所以scrollTop设置的是一个无效值,动画自然不会生效。

额外的替代方案

如果你不想用回调,也可以用setTimeout来延迟滚动操作(不过回调方案更可靠):

$("#mainDiv").show();
setTimeout(function() {
  $("#mainDiv").animate({ scrollTop: $('#mainDiv').prop("scrollHeight") }, 1000);
}, 10);

完整可运行代码

这里是修改后的完整代码,我还修复了你HTML里重复使用ID的问题(同一个页面ID必须唯一):

<button id="openDiv">Open div</button>
<button id="closeDiv">Close div</button>
<div id="mainDiv">
 <div class="divText">
 <h5>text</h5>
 </div>
 <div class="divText">
 <h5>text</h5>
 </div>
 <div class="divText">
 <h5>text</h5>
 </div>
 <div class="divText">
 <h5>text</h5>
 </div>
 <div id="divTextEnd">
 <h5>text (底部)</h5>
 </div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<style>
#mainDiv {
 height: 150px;
 background-color: #2A2A2A;
 overflow-y: auto;
 overflow-x: hidden;
 display: none;
}
.divText {
 color: #fff;
 background-color: #555555;
 height: 20px;
}
#divTextEnd{
 color: #fff;
 background-color: red;
 height: 20px;
}
#openDiv{
 background-color: green;
 border: none;
 color: #fff;
}
#closeDiv{
 display: none;
 background-color: red;
 border: none;
 color: #fff;
}
</style>
<script>
$(document).ready(function() {
 $('#openDiv').on('click', function(){
 $('#openDiv').hide();
 $('#closeDiv').show();
 $("#mainDiv").show(function() {
   $(this).animate({ scrollTop: $(this).prop("scrollHeight") }, 1000);
 });
 });
 $('#closeDiv').on('click', function(){
 $('#closeDiv').hide();
 $("#mainDiv").hide();
 $('#openDiv').show();
 });
});
</script>

现在点击"Open div"按钮,mainDiv会平滑滚动到底部,和你想要的Stack Overflow聊天室效果完全一致。

内容的提问来源于stack exchange,提问作者mario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:46:14