Ich habe das gerade implementiert und vielleicht können Sie meinen Ansatz verwenden.
Angenommen, wir haben den folgenden HTML-Code:
<div id="out" style="overflow:auto"></div>
Dann können wir überprüfen, ob es nach unten gescrollt hat mit:
var out = document.getElementById("out");
// allow 1px inaccuracy by adding 1
var isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 1;
scrollHeight gibt die Höhe des Elements an, einschließlich aller nicht sichtbaren Bereiche aufgrund von Überlauf. clientHeight gibt Ihnen die CSS-Höhe oder auf andere Weise die tatsächliche Höhe des Elements an. Beide Methoden geben die Höhe ohne zurück margin
, sodass Sie sich darüber keine Sorgen machen müssen. scrollTop gibt Ihnen die Position des vertikalen Bildlaufs an . 0 ist oben und max ist die scrollHeight des Elements minus der Elementhöhe selbst. Bei Verwendung der Bildlaufleiste kann es schwierig sein (für mich in Chrome), die Bildlaufleiste ganz nach unten zu bringen. Also warf ich eine 1px Ungenauigkeit ein. So isScrolledToBottom
wird wahr sein , selbst wenn die Scrollbar von unten ist 1px. Sie können dies auf das einstellen, was sich für Sie richtig anfühlt.
Dann geht es einfach darum, das scrollTop des Elements nach unten zu setzen.
if(isScrolledToBottom)
out.scrollTop = out.scrollHeight - out.clientHeight;
Ich habe eine Geige für Sie gemacht, um das Konzept zu zeigen: http://jsfiddle.net/dotnetCarpenter/KpM5j/
BEARBEITEN: Code-Snippet hinzugefügt, um zu verdeutlichen, wann dies der Fall isScrolledToBottom
ist true
.
Scrollen Sie die Bildlaufleiste nach unten
const out = document.getElementById("out")
let c = 0
setInterval(function() {
// allow 1px inaccuracy by adding 1
const isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 1
const newElement = document.createElement("div")
newElement.textContent = format(c++, 'Bottom position:', out.scrollHeight - out.clientHeight, 'Scroll position:', out.scrollTop)
out.appendChild(newElement)
// scroll to bottom if isScrolledToBottom is true
if (isScrolledToBottom) {
out.scrollTop = out.scrollHeight - out.clientHeight
}
}, 500)
function format () {
return Array.prototype.slice.call(arguments).join(' ')
}
#out {
height: 100px;
}
<div id="out" style="overflow:auto"></div>
<p>To be clear: We want the scrollbar to stick to the bottom if we have scrolled all the way down. If we scroll up, then we don't want the content to move.
</p>
{position : relative; bottom:0;}
. Entfernen Sie die CSS-Eigenschaft, sobald der Benutzer einen Bildlauf durchgeführt hat.