Tôi chỉ thực hiện điều này và có lẽ bạn có thể sử dụng phương pháp của tôi.
Giả sử chúng tôi có HTML sau:
<div id="out" style="overflow:auto"></div>
Sau đó, chúng tôi có thể kiểm tra nếu nó cuộn xuống dưới cùng với:
var out = document.getElementById("out");
// allow 1px inaccuracy by adding 1
var isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 1;
scrollHeight cung cấp cho bạn chiều cao của phần tử, bao gồm mọi vùng không nhìn thấy do tràn. clientHeight cung cấp cho bạn chiều cao CSS hoặc nói theo một cách khác, chiều cao thực tế của phần tử. Cả hai phương pháp đều trả về chiều cao mà không cần margin
, vì vậy bạn không cần phải lo lắng về điều đó. scrollTop cung cấp cho bạn vị trí của cuộn dọc. 0 là trên cùng và tối đa là cuộnHeight của phần tử trừ đi chiều cao của phần tử. Khi sử dụng thanh cuộn, có thể rất khó (trong Chrome đối với tôi) để đưa thanh cuộn xuống tận đáy. Vì vậy, tôi đã ném không chính xác 1px. Vì vậy, isScrolledToBottom
sẽ đúng ngay cả khi thanh cuộn cách đáy 1px. Bạn có thể thiết lập điều này cho bất cứ điều gì cảm thấy đúng với bạn.
Sau đó, nó chỉ đơn giản là vấn đề đặt scrollTop của phần tử xuống dưới cùng.
if(isScrolledToBottom)
out.scrollTop = out.scrollHeight - out.clientHeight;
Tôi đã tạo một câu đố để bạn thể hiện khái niệm: http://jsfiddle.net/dotnetCarpenter/KpM5j/
EDIT: nhập đoạn mã để làm rõ khi isScrolledToBottom
là true
.
Dán thanh cuộn xuống dưới
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;}
. Xóa thuộc tính css khi người dùng đã cuộn.