Я только что реализовал это, и, возможно, вы можете использовать мой подход.
Скажем, у нас есть следующий 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 после прокрутки пользователем.