Die beiden oberen Antworten haben bei mir nicht funktioniert, und keine der anderen Antworten war für mich hilfreich. Hier sind also 3 Lösungen:
Lösung 1:
$(function(){
var scrolled = false;
var lastScroll = 0;
var count = 0;
$("#chatscreen").on("scroll", function() {
var nextScroll = $(this).scrollTop();
if (nextScroll <= lastScroll) {
scrolled = true;
}
lastScroll = nextScroll;
console.log(nextScroll, $("#inner").height())
if ((nextScroll + 100) == $("#inner").height()) {
scrolled = false;
}
});
function updateScroll(){
if(!scrolled){
var element = document.getElementById("chatscreen");
var inner = document.getElementById("inner");
element.scrollTop = inner.scrollHeight;
}
}
// Jetzt laden wir unsere Nachrichten
function load_messages(){
$( "#inner" ).append( "Test" + count + "" );
count = count + 1;
updateScroll();
}
setInterval(load_messages,300);
});
#chatscreen {
width: 300px;
overflow-y: scroll;
max-height:100px;
}
Lösung 2:
$(function(){
var isScrolledToBottom = false;
// Jetzt laden wir unsere Nachrichten
function load_messages(){
$( "#chatscreen" ).append( "Test" );
updateScr();
}
var out = document.getElementById("chatscreen");
var c = 0;
$("#chatscreen").on('scroll', function(){
console.log(out.scrollHeight);
isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 10;
});
function updateScr() {
// 1 Pixel Ungenauigkeit zulassen, indem man 1 hinzufügt
//console.log(out.scrollHeight - out.clientHeight, out.scrollTop + 1);
var newElement = document.createElement("div");
newElement.innerHTML = c++;
out.appendChild(newElement);
console.log(isScrolledToBottom);
// Zum Ende scrollen, wenn isScrolledToBottom
if(isScrolledToBottom) {out.scrollTop = out.scrollHeight - out.clientHeight; }
}
var add = setInterval(updateScr, 1000);
setInterval(load_messages,300); // auf 300 ändern, um die neueste Nachricht anzuzeigen, die du nach dem Drücken von Enter gesendet hast // kommentiere diese Zeile aus und es funktioniert, kommentiere sie wieder ein und es schlägt fehl
// Wenn es auf 1000 steht, wird die vorletzte Nachricht angezeigt
setInterval(updateScroll,30);
});
#chatscreen {
height: 300px;
border: 1px solid purple;
overflow: scroll;
}
Lösung 3:
$(function(){
// Jetzt laden wir unsere Nachrichten
function load_messages(){
$( "#chatscreen" ).append( "Test" );
}
var out = document.getElementById("chatscreen");
var c = 0;
var add = setInterval(function() {
// 1 Pixel Ungenauigkeit zulassen, indem man 1 hinzufügt
var isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 1;
load_messages();
// Zum Ende scrollen, wenn isScrolledToBottom
if(isScrolledToBottom) {out.scrollTop = out.scrollHeight - out.clientHeight; }
}, 1000);
setInterval(updateScroll,30);
});
#chatscreen {
height: 100px;
overflow: scroll;
border: 1px solid #000;
}