Я щойно це здійснив і, можливо, ви можете використовувати мій підхід.
Скажімо, у нас є такий 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 - верх, а макс - висота елемента прокрутки, мінус сама висота елемента. Під час використання смуги прокрутки може бути важко (для мене це було в Chrome) отримати смугу прокрутки аж донизу. тому я кинув неточність в 1px. Так 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, коли користувач прокрутить.