Обозреватель пересечений, использующий querySelectorAll, генерирует ошибку TypeError - PullRequest
0 голосов
/ 05 апреля 2020

Я застреваю в проблеме наблюдателя пересечения. Использование document.querySelectorAll('.entry') приводит к возникновению ошибки TypeError: «Uncaught TypeError: Не удалось выполнить« Наблюдение »на IntersectionObserver»: параметр 1 не относится к типу «Элемент». "

Изменение document.querySelectorAll('.entry'); на document.querySelector('.entry'); решает выпускать и все работает.

Что я делаю не так?

Основа c HTML Структура:

<html>
<body>
  <div id="content-container">
    <div class="content">
      <div class="entry">Some content here on each entry</div>
      <div class="entry"></div>
      <div class="entry"></div>
      <div class="entry"></div>
      <div class="entry"></div>
      <div class="entry"></div>
    </div>
</div>
</body
</html>

JavaScript :

const blog = document.querySelectorAll('.entry');
const options = {
  root: null,
  rootMargin: '0px',
};

const observer = new IntersectionObserver(function(entries, observer) {
  entries.forEach((entry) => {
    if (!entry.isIntersecting) {
      return;
    } 

    else {
      console.log(entry);
    }
  });



}, options);


observer.observe(blog);

1 Ответ

1 голос
/ 05 апреля 2020

Эта проблема возникает из-за того, что IntersectionObserver.observe() может наблюдать только один targetElement, но, используя document.querySelectorAll(), вы передаете NodeList, представляющий список элементов документа, которые соответствуют указанному группа селекторов. Таким образом, у вас есть проблема с ней, но document.querySelector() дает вам только первый соответствующий элемент, поэтому при использовании этой проблемы не возникает никаких проблем.

Вы можете решить эту проблему, просматривая все элементы в списке и наблюдать за каждым из них по отдельности, как:

const blogs = document.querySelectorAll('.entry');
blogs.forEach(blog => observer.observe(blog));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...