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