ฉันเพิ่งใช้สิ่งนี้และบางทีคุณอาจใช้วิธีการของฉัน
สมมติว่าเรามี 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 คือด้านบนและสูงสุดคือ scrollHeight ขององค์ประกอบลบความสูงขององค์ประกอบเอง เมื่อใช้แถบเลื่อนมันอาจเป็นเรื่องยาก (ใน Chrome สำหรับฉัน) เพื่อให้แถบเลื่อนเลื่อนลงมาด้านล่าง ดังนั้นฉันจึงโยนความไม่ถูกต้อง 1px ดังนั้นisScrolledToBottom
จะเป็นจริงแม้ว่าแถบเลื่อนจะเป็น 1px จากด้านล่าง คุณสามารถตั้งค่านี้เป็นอะไรก็ได้ที่คุณรู้สึกถูกต้อง
จากนั้นเป็นเพียงเรื่องของการตั้งค่า scrollTop ขององค์ประกอบด้านล่าง
if(isScrolledToBottom)
out.scrollTop = out.scrollHeight - out.clientHeight;
ฉันได้ทำซอให้คุณแสดงแนวคิด: http://jsfiddle.net/dotnetCarpenter/KpM5j/
แก้ไข: เพิ่มโค้ดที่จะชี้แจงเมื่อเป็น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 เมื่อผู้ใช้เลื่อน