JSFiddle - React, Tailwind, and code Playground

by Mike Jacobson

HTML

<div class="container">
  <div>Item 01</div>
  <div>Item 02</div>
  <div>Item 03</div>
  <div>Item 04</div>
  <div>Item 05</div>
  <div>Item 06</div>
  <div>Item 07</div>
  <div>Item 08</div>
  <div>Item 09</div>
  <div>Item 10</div>
  <div>Item 11</div>
  <div>Item 12</div>
  <div>Item 13</div>
  <div>Item 14</div>
  <div>Item 15</div>
</div>

CSS

div {
  border-bottom: 1px solid #ddd;
  height: 40px;
  padding: 10px;
  width: 100%;
}

.container {
  border: 1px solid #ddd;
  height: 200px;
  overflow: auto;
  width: 500px;
}

JavaScript

const options = {
  root: document.querySelector('.container'),
  rootMargin: '190px',
  threshold: 1.0
}

const container = document.querySelector('.container');
const containerHTML = container.innerHTML;
const elements = document.querySelectorAll('.container > div');
const observer = new IntersectionObserver(callback, options);
const target = document.querySelector('.container > div:last-child');
observer.observe(target);

function callback(entries, observer) {
	const entry = entries[0];
  if (entry.isIntersecting) {
  	container.innerHTML += containerHTML;
  	//container.appendChild(containerHTML);
  }
 }