首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scrollTop (JS和jQuery版本)不会一直滚动到底部

问scrollTop (JS和jQuery版本)不会一直滚动到底部
EN

Stack Overflow用户
提问于 2018-03-06 17:53:42
回答 2查看 1.8K关注 0票数 0

我正在创建一个聊天应用程序,当消息加载时(从Firebase),包含消息的div滚动到底部以显示最新的附加消息div。scrollTop确实有点工作,但是它不会一直滚动到底部,不管我为scrollTop使用了什么值。我已经尝试过JS和jQuery版本的scrollTop,但两者都无法将其滚动到底部。下面是我的一些代码: HTML

代码语言:javascript
复制
<div id="msgContainer">
   <div id="msgFeed">
      //Messages load here from a database
   </div>
</div>

CSS

代码语言:javascript
复制
#msgContainer {
  height: 165px;
  overflow-x: hidden;
  overflow-y: visible;
}
#msgFeed {
  display: block;
  background-color: white;
  position: relative;
  margin: 0;
  overflow: hidden;
}

JS

代码语言:javascript
复制
function scrollToBottom (id) {
   var div = document.getElementById(id);
   div.scrollTop = div.scrollHeight - div.clientHeight;
}

或者..。

代码语言:javascript
复制
$('#scroll').scrollTop(1000000);

似乎不重要的是,哪个版本或价值,我使用,它只是拒绝滚动大约5%的方式到底部。知道我做错了什么吗??

EN

回答 2

Stack Overflow用户

发布于 2021-03-22 22:26:07

我处理了一个类似的问题。我从一个网络套接字中接收到一个值,然后放到一个聊天框中。每当我使用滚动顶/高度时,它总是滚动到最后一条消息的旁边(只关闭一点点)。即使我输入了最大值或很高的值,它也不会一直滚动。

这就发生了b/c容器的尺寸(加上添加的项)还不是我们所期望的。一个简单的超时将解决这个问题:

代码语言:javascript
复制
setTimeout(() => {
    el.scrollTop = el.scrollHeight;
}, 500); 

如果您使用的是Vue.js (在其他反应性框架中可能有些错误),您还可以执行以下操作(这是Vue实例):

代码语言:javascript
复制
this.$nextTick(
    () => (this.$refs.chat.scrollTop = this.$refs.chat.scrollHeight)
); 

“nextTick”似乎是最佳选择,但并不是每个人都会使用Vue。希望这一切都能帮助别人解决这个简单但不那么明显的问题。

编辑: nextTick似乎并不总是起作用。setTimeout应该总是有效的。

票数 1
EN

Stack Overflow用户

发布于 2018-04-06 21:30:46

我不知道您用#scroll指的是什么元素,因为我在您的html中没有看到它,但是尝试一下,如果它还差5%,请告诉我。

​

代码语言:javascript
复制
$(document).ready(function(){
function scrollToBottom (id) {
    var div = document.getElementById(id);
   
    /*TRY*/
    div.scrollTop = div.scrollHeight - div.clientHeight;
    /*OR*/
    $('#'+id).scrollTop(div.scrollHeight - div.clientHeight);
}
scrollToBottom('msgContainer');

});
代码语言:javascript
复制
#msgContainer {
  height: 165px;
  overflow-x: hidden;
  overflow-y: visible;
  border: 3px solid red
}
#msgFeed {
  display: block;
  background-color: white;
  position: relative;
  margin: 0;
  overflow: hidden;
  border: 1px solid blue
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="msgContainer">
   <div id="msgFeed">
      <br><br><br><br><br><br><br><br><br><br><br><br><br>
      <br><br><br><br><br><br><br><br><br><br><br><br><br>
      <br><br><br><br><br><br><br><br><br><br><br><br><br>
      <br><br><br><br><br><br><br><br><br><br><br><br><br>
      <br><br><br><br><br><br><br><br><br><br><br><br><br>
      //Messages load here from a database
   </div>
</div>

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49137100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档