我有一个使用溢出一个div:自动保持内容的DIV中,因为它的大小,而页面上拖动。 我使用一些Ajax从服务器获取文本行,然后将它们添加到div结束,所以内容向下越来越大。 每当出现这种情况,我想用JS到div滚动至底部,所以最近添加的内容是可见的,类似于聊天室或命令行控制台会的工作方式。
到目前为止,我一直在使用这个片段来做到这一点(我也使用jQuery,因此$()函数):
$("#thediv").scrollTop = $("#thediv").scrollHeight;
但是它已经给我不一致的结果。 有时工作,有时没有,这完全停止,如果用户重新调整过的股利或手动移动滚动条来工作。
目标浏览器是火狐3,并且它被部署在受控的环境中,因此并不需要在IE浏览器在所有的工作。
任何想法家伙? 这一次的让我难住了。 谢谢!
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
的内容的价值。
scrollIntoView
该方法scrollIntoView滚动元件进入视野。
使用循环遍历一个元素的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;
$("#thediv").scrollTop($("#thediv")[0].scrollHeight);
它可以在纯JS来完成。 诀窍是scrollTop的设定为比元件(的总高度等于或大于一个值scrollHeight
):
const theDiv = document.querySelector('#thediv');
theDiv.scrollTop = Math.pow(10, 10);
从MDN :
如果设置为可用的元素最大的值,scrollTop的结算本身的最大值。
而值Math.pow(10, 10)
使用像一个过高的值确实起作用Infintiy
或Number.MAX_VALUE
将重置scrollTop的到0
(火狐66)。
我有一个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内容”)。高度将产生真正的内容高度值。 希望这有助于有人出来!