मुझे एक ही समस्या का सामना करना पड़ा है, लेकिन एक अतिरिक्त बाधा के साथ: मेरे पास उस कोड पर कोई नियंत्रण नहीं था जो स्क्रॉल कंटेनर में नए तत्वों को जोड़ते थे। मैंने यहां जो भी उदाहरण पाए उनमें से किसी ने भी मुझे ऐसा नहीं करने दिया। यहाँ समाधान मैं के साथ समाप्त हो गया है।
यह Mutation Observers
( https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver ) का उपयोग करता है, जो इसे केवल आधुनिक ब्राउज़रों पर ही उपयोग करने योग्य बनाता है (हालांकि पॉलीफिल मौजूद हैं)
तो मूल रूप से कोड बस यही करता है:
var scrollContainer = document.getElementById("myId");
// Define the Mutation Observer
var observer = new MutationObserver(function(mutations) {
// Compute sum of the heights of added Nodes
var newNodesHeight = mutations.reduce(function(sum, mutation) {
return sum + [].slice.call(mutation.addedNodes)
.map(function (node) { return node.scrollHeight || 0; })
.reduce(function(sum, height) {return sum + height});
}, 0);
// Scroll to bottom if it was already scrolled to bottom
if (scrollContainer.clientHeight + scrollContainer.scrollTop + newNodesHeight + 10 >= scrollContainer.scrollHeight) {
scrollContainer.scrollTop = scrollContainer.scrollHeight;
}
});
// Observe the DOM Element
observer.observe(scrollContainer, {childList: true});
मैंने अवधारणा को प्रदर्शित करने के लिए एक बेला बनाया:
https://jsfiddle.net/j17r4bnk/