Answers:
这是我在网站上使用的内容:
var objDiv = document.getElementById("your_div");
objDiv.scrollTop = objDiv.scrollHeight;
如果您使用的是jQuery scrollTop,这会容易得多:
$("#mydiv").scrollTop($("#mydiv")[0].scrollHeight);
$("#mydiv").scrollTop(function() { return this.scrollHeight; });
您可以使用以下代码:
function scrollToBottom(id){
var div = document.getElementById(id);
div.scrollTop = div.scrollHeight - div.clientHeight;
}
要使用JQuery 进行平滑滚动:
function scrollSmoothToBottom (id) {
var div = document.getElementById(id);
$('#' + id).animate({
scrollTop: div.scrollHeight - div.clientHeight
}, 500);
}
见例子上的jsfiddle
这就是它的工作方式:
$('#DebugContainer').stop().animate({
scrollTop: $('#DebugContainer')[0].scrollHeight
}, 800);
var mydiv = $("#scroll");
mydiv.scrollTop(mydiv.prop("scrollHeight"));
jQuery 1.6的作品
适用于所有当前浏览器的较新方法:
this.scrollIntoView(false);
如果您不想依赖scrollHeight
,以下代码会有所帮助:
$('#scroll').scrollTop(1000000);
1E10
)。数量较少的作品
使用jQuery,scrollTop用于设置任何给定元素的scollbar的垂直位置。还有一个不错的jquery scrollTo插件,用于滚动动画和不同的选项(演示)
var myDiv = $("#div_id").get(0);
myDiv.scrollTop = myDiv.scrollHeight;
如果要在向下滚动时使用jQuery的animate方法添加动画,请检查以下代码段:
var myDiv = $("#div_id").get(0);
myDiv.animate({
scrollTop: myDiv.scrollHeight
}, 500);
我遇到了同样的问题,但是有一个额外的约束:我无法控制将新元素附加到滚动容器的代码。我在这里找到的所有示例都不允许我这样做。这是我最终得到的解决方案。
它使用Mutation Observers
(https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver)使其仅在现代浏览器中可用(尽管存在polyfills)
因此,基本上,代码就是这样做的:
var scrollContainer = document.getElementById("myId");
// Define the Mutation Observer
var observer = new MutationObserver(function(mutations) {
// Compute sum of the heights of added Nodes
var newNodesHeight = mutations.reduce(function(sum, mutation) {
return sum + [].slice.call(mutation.addedNodes)
.map(function (node) { return node.scrollHeight || 0; })
.reduce(function(sum, height) {return sum + height});
}, 0);
// Scroll to bottom if it was already scrolled to bottom
if (scrollContainer.clientHeight + scrollContainer.scrollTop + newNodesHeight + 10 >= scrollContainer.scrollHeight) {
scrollContainer.scrollTop = scrollContainer.scrollHeight;
}
});
// Observe the DOM Element
observer.observe(scrollContainer, {childList: true});
我做了一个小提琴来演示这个概念:https : //jsfiddle.net/j17r4bnk/
<div class="abc"><div data-bind=attr : {'id': myId } ></div></div>
在这段代码中,myId是一个变量。如何在脚本中访问此ID。
发现这确实有帮助,谢谢。
对于那里的Angular 1.X人员:
angular.module('myApp').controller('myController', ['$scope', '$document',
function($scope, $document) {
var overflowScrollElement = $document[0].getElementById('your_overflow_scroll_div');
overflowScrollElement[0].scrollTop = overflowScrollElement[0].scrollHeight;
}
]);
仅仅因为jQuery元素与HTML DOM元素的包装在角度上有些混乱。
同样对于聊天应用程序,我发现在加载聊天记录后进行此分配很有用,您可能还需要在短暂的超时时间内加油。
小附录:仅滚动(如果最后一行已经可见)。如果滚动一点,则将内容保留在原处(注意:未使用不同的字体大小进行测试。这可能需要在“> =比较内进行一些调整”):
var objDiv = document.getElementById(id);
var doScroll=objDiv.scrollTop>=(objDiv.scrollHeight-objDiv.clientHeight);
// add new content to div
$('#' + id ).append("new line at end<br>"); // this is jquery!
// doScroll is true, if we the bottom line is already visible
if( doScroll) objDiv.scrollTop = objDiv.scrollHeight;
就像奖金片段一样。我正在使用angular,并且在用户选择与用户的不同对话时尝试将消息线程滚动到底部。为了确保在使用ng-repeat消息将新数据加载到div后,滚动条可以正常工作,只需将滚动条包装在超时中即可。
$timeout(function(){
var messageThread = document.getElementById('message-thread-div-id');
messageThread.scrollTop = messageThread.scrollHeight;
},0)
这将确保在将数据插入DOM之后触发滚动事件。
setTimeout(function() { ... }, n)
Java脚本:
document.getElementById('messages').scrollIntoView(false);
滚动到当前内容的最后一行。
在我的Angular 6应用程序中,我只是这样做了:
postMessage() {
// post functions here
let history = document.getElementById('history')
let interval
interval = setInterval(function() {
history.scrollTop = history.scrollHeight
clearInterval(interval)
}, 1)
}
clearInterval(interval)函数将停止计时器,以允许手动滚动顶部/底部。
我的场景:我有一个字符串列表,其中必须添加用户给出的字符串,然后自动滚动到列表的末尾。我将列表的显示高度固定为固定值,此后它应该溢出。
我尝试了@Jeremy Ruten的答案,它起作用了,但是它正在滚动到第(n-1)个元素。如果有人遇到此类问题,则可以使用setTimeOut()
方法解决方法。您需要将代码修改如下:
setTimeout(() => {
var objDiv = document.getElementById('div_id');
objDiv.scrollTop = objDiv.scrollHeight
}, 0)
这是我创建的StcakBlitz链接,其中显示了问题及其解决方案:https ://stackblitz.com/edit/angular-ivy-x9esw8
采用 :
var element= $('element');
var maxScrollTop = element[0].scrollHeight - element.outerHeight();
element.scrollTop(maxScrollTop);
或检查滚动到底部:
var element = $(element);
var maxScrollTop = element[0].scrollHeight - element.outerHeight();
element.on('scroll', function() {
if ( element.scrollTop() >= maxScrollTop ) {
alert('scroll to bottom');
}
});
如果这样做是为了滚动到聊天窗口的底部,请执行以下操作
在聊天中滚动到特定div的想法如下
1)由Person,time和message组成的每个chat div在带有类chatContentbox的for循环中运行
2)querySelectorAll查找所有此类数组。可能是400个节点(400个聊天)
3)转到最后一个
4)scrollIntoView()
let lastChatBox = document.querySelectorAll('.chatContentBox');
lastChatBox = lastChatBox[lastChatBox.length-1];
lastChatBox.scrollIntoView();
scrollIntoView
,因此无需再添加一个。