Ben sadece bunu uyguladım ve belki benim yaklaşımımı kullanabilirsiniz.
Diyelim ki şu HTML'ye sahibiz:
<div id="out" style="overflow:auto"></div>
Ardından, aşağıya doğru kaydırılıp kaydırılmadığını kontrol edebiliriz:
var out = document.getElementById("out");
// allow 1px inaccuracy by adding 1
var isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 1;
scrollHeight , taşma nedeniyle görünmeyen alanlar da dahil olmak üzere öğenin yüksekliğini verir. clientHeight size CSS yüksekliğini verir veya başka bir şekilde öğenin gerçek yüksekliğini söyler. Her iki yöntem de yüksekliği döndürür margin
, bu yüzden endişelenmenize gerek yoktur. scrollTop size dikey kaydırmanın konumunu verir. 0 en üstte ve max öğenin scrollHeight öğesi ile eleman yüksekliğinin kendisidir. Kaydırma çubuğunu kullanırken, kaydırma çubuğunu en alta kadar aşağı indirmek zor olabilir (benim için Chrome'da). 1 piksellik bir yanlışlıkla attım. Yani isScrolledToBottom
kaydırma çubuğu alttan 1px olsa bile geçerli olacak. Bunu sizin için doğru olan her şeye ayarlayabilirsiniz.
Ardından, öğenin scrollTop öğesini en alta ayarlamak önemlidir.
if(isScrolledToBottom)
out.scrollTop = out.scrollHeight - out.clientHeight;
Konsepti göstermeniz için bir keman yaptım: http://jsfiddle.net/dotnetCarpenter/KpM5j/
DÜZENLEME: zaman Eklenen kod parçacığı netleştirmek için isScrolledToBottom
olduğunu true
.
Kaydırma çubuğunu alta yapıştır
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;}
. Kullanıcı kaydırma yaptıktan sonra css özelliğini kaldırın.