Я только что реализовал это, и, возможно, вы можете использовать мой подход.
Скажем, у нас есть следующий HTML:
<div id="out" style="overflow:auto"></div>
Затем мы можем проверить, прокручивается ли она до конца с помощью:
var out = document.getElementById("out");
// allow 1px inaccuracy by adding 1
var isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 1;
scrollHeight дает вам высоту элемента, включая любую невидимую область из-за переполнения. clientHeight дает вам высоту CSS или, иначе говоря, фактическую высоту элемента. Оба метода возвращают высоту без margin, так что вам не нужно об этом беспокоиться. scrollTop дает вам положение вертикальной прокрутки. 0 - это верх, а max - это scrollHeight элемента за вычетом высоты самого элемента. При использовании полосы прокрутки может быть трудно (это было в Chrome для меня) получить полосу прокрутки полностью вниз до дна. поэтому я добавил неточность в 1 пиксель. Так isScrolledToBottomбудет верно, даже если полоса прокрутки будет 1px снизу. Вы можете установить это так, как считаете нужным.
Тогда это просто вопрос установки scrollTop элемента внизу.
if(isScrolledToBottom)
out.scrollTop = out.scrollHeight - out.clientHeight;
Я сделал скрипку для вас, чтобы показать концепцию: http://jsfiddle.net/dotnetCarpenter/KpM5j/
EDIT: Добавлен фрагмент кода , чтобы выяснить , когда isScrolledToBottomэто true.
Прикрепить полосу прокрутки вниз
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;}. Удалите свойство css после прокрутки пользователем.