Не хочется подключать каждый элемент к Intersection Observer отдельно, поэтому задумался о циклах, которые пройдут по всем элементам на странице и подключат наблюдатели к кнопкам и заголовкам. Осталось только определять тип элемента, через typeof не определяет. Через id и class не вариант определять элемент.
HTML:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/x-icon" href="favicon.ico">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<script src="script.js"></script>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<button>gg</button>
<h1>H1</h1>
</body>
</html>
CSS:
body{
display: grid;
}
JS:
const ConstObserver = new IntersectionObserver(entries =>
{
entries.forEach(entry =>
{
if (entry.isIntersecting)
{
//как здесь узнать, какой элемент перед нами - кнопка или заголовок?
}
});
}, { threshold: 1 });
//Те самые циклы
document.querySelectorAll("h1").forEach(el => ConstObserver.observe(el));
document.querySelectorAll("button").forEach(el => ConstObserver.observe(el));