Подгрузка (псевдо) блоков при прокрутке
В предыдущем посте рассматривался код для подгрузки блоков при нажатии кнопки, то есть по запросу.
Здесь же описан код, который позволяет загружать блоки при прокрутке страницы. Можно настроить количество подгружаемых блоков, а также есть возможность подстроить расстояние низа родительского блока от низа окна.
HTML
<div class="page">
<div class="container">
<p class="text">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text">Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
<p class="text" hidden>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Dignissimos perferendis atque quisquam culpa iste fuga, expedita quod minima, quia reprehenderit quaerat nulla! Consequuntur, perspiciatis placeat ex sunt corrupti doloribus aperiam fugit quos laborum culpa cumque quod voluptates itaque modi minima animi omnis laudantium quae iusto ut temporibus. Necessitatibus reprehenderit sunt esse, tempore voluptatem modi fuga dolores rem ex veritatis mollitia delectus. Perferendis, voluptatem autem. Laudantium, natus adipisci ipsa numquam reiciendis ducimus! Quidem nam quos nostrum dicta labore possimus numquam ullam culpa fugit animi, molestias quisquam totam doloribus assumenda velit soluta cumque repellendus voluptate. Dolore corporis saepe amet accusamus. Accusamus, itaque amet minus consequatur soluta dignissimos deserunt quaerat nesciunt placeat sed eum tempora fugit quam vero optio aliquid provident enim eligendi?</p>
</div>
</div>JavaScript
window.addEventListener("scroll", scrollLoader);
function scrollLoader() {
loadMore(".container", 1);
}
function loadMore(selector, n) {
const parent = document.querySelector(selector);
const rect = parent.getBoundingClientRect();
const distanceFromBottom = window.innerHeight - rect.bottom;
if (distanceFromBottom > 0) {
let hiddenBlocks = parent.querySelectorAll("[hidden]");
hiddenBlocks.forEach((el) => {
el.style.opacity = 0;
el.style.transition = "1000ms";
});
if (hiddenBlocks.length > n) {
for (let i = 0; i < n; i++) {
hiddenBlocks[i].removeAttribute("hidden");
setTimeout(() => {
hiddenBlocks[i].style.opacity = 1;
}, i * 500);
}
} else if (hiddenBlocks.length <= n && hiddenBlocks.length > 0) {
for (let i = 0; i < hiddenBlocks.length; i++) {
hiddenBlocks[i].removeAttribute("hidden");
setTimeout(() => {
hiddenBlocks[i].style.opacity = 1;
}, i * 500);
}
} else {
window.removeEventListener("scroll", scrollLoader);
return;
}
// console.log(hiddenBlocks.length);
}
}
loadMore('.container', 3);Рабочий вариант также доступен на CodePen