滚动使用JavaScript溢出的DIV(Scrolling Overflowed DIVs wit

2019-07-03 19:46发布

我有一个使用溢出一个div:自动保持内容的DIV中,因为它的大小,而页面上拖动。 我使用一些Ajax从服务器获取文本行,然后将它们添加到div结束,所以内容向下越来越大。 每当出现这种情况,我想用JS到div滚动至底部,所以最近添加的内容是可见的,类似于聊天室或命令行控制台会的工作方式。

到目前为止,我一直在使用这个片段来做到这一点(我也使用jQuery,因此$()函数):

$("#thediv").scrollTop = $("#thediv").scrollHeight;

但是它已经给我不一致的结果。 有时工作,有时没有,这完全停止,如果用户重新调整过的股利或手动移动滚动条来工作。

目标浏览器是火狐3,并且它被部署在受控的环境中,因此并不需要在IE浏览器在所有的工作。

任何想法家伙? 这一次的让我难住了。 谢谢!

Answer 1:

scrollHeight应该是内容的总高度。 scrollTop指定在元件的工作区的顶部,以被显示的象素偏移到该内容。

所以,你真的想(仍然使用jQuery):

$("#thediv").each( function() 
{
   // certain browsers have a bug such that scrollHeight is too small
   // when content does not fill the client area of the element
   var scrollHeight = Math.max(this.scrollHeight, this.clientHeight);
   this.scrollTop = scrollHeight - this.clientHeight;
});

...这将设置滚动偏移到最后clientHeight的内容的价值。



Answer 2:

scrollIntoView

该方法scrollIntoView滚动元件进入视野。



Answer 3:

使用循环遍历一个元素的jQuery是非常低效的。 当选择一个ID,您可以使用get()或[]符号只是找回了jQuery的第一和独特的元素。

var div = $("#thediv")[0];

// certain browsers have a bug such that scrollHeight is too small
// when content does not fill the client area of the element
var scrollHeight = Math.max(div.scrollHeight, div.clientHeight);
div.scrollTop = scrollHeight - div.clientHeight;


Answer 4:

$("#thediv").scrollTop($("#thediv")[0].scrollHeight);


Answer 5:

它可以在纯JS来完成。 诀窍是scrollTop的设定为比元件(的总高度等于或大于一个值scrollHeight ):

const theDiv = document.querySelector('#thediv');
theDiv.scrollTop = Math.pow(10, 10);

从MDN :

如果设置为可用的元素最大的值,scrollTop的结算本身的最大值。

而值Math.pow(10, 10)使用像一个过高的值确实起作用InfintiyNumber.MAX_VALUE将重置scrollTop的到0 (火狐66)。



Answer 6:

我有一个div包装为浮动左,其内容正在调整这3个div的。 它有助于把时髦的彩色边框/背景上的DIV-包装当您尝试解决这个问题。 问题是,调整大小后的div-含量在div-包装外面溢出(并放血到下方的包装以下内容的区域)。

通过使用@ Shog9的回答以上解决。 至于适用于我的情况,这是HTML布局:

<div id="div-wrapper">
  <div class="left-div"></div>
  <div id="div-content" class="middle-div">
  Some short/sweet content that will be elongated by Jquery.
  </div>
  <div class="right-div"></div>
</div>

这是我的jQuery来调整DIV-包装:

<script>
$("#div-content").text("a very long string of text that will overflow beyond the width/height of the div-content");
//now I need to resize the div...
var contentHeight = $('#div-content').prop('scrollHeight')
$("#div-wrapper").height(contentHeight);
</script>

要注意,$(“#DIV内容”)。支撑(“scrollHeight属性”)产生的包装需要调整的高度。 另外我不知道任何其他方式获得scrollHeight属性的实际jQuery的功能; 既不是$(“#DIV内容”)。scrollTop的()和$(“#DIV内容”)。高度将产生真正的内容高度值。 希望这有助于有人出来!



文章来源: Scrolling Overflowed DIVs with JavaScript