IntersectionObserver和ajax加载的内容

问题描述 投票:0回答:1

目前,我正在网站上工作,该网站使用IntersectionObserver进行了一些本机延迟加载,我尝试加载的图像是通过ajax加载的,因此我认为它们不是“加载”到的DOM在页面加载时,因此不能通过延迟加载代码来延迟加载图像,

const io = new IntersectionObserver((entries, observer) => {
    // console.log(entries)
    entries.forEach(entry => {
      console.log('😍');

      if (entry.isIntersecting) {

        console.log('intersecting');

        const img = entry.target;
        const src = img.getAttribute('data-lazy');

        img.setAttribute('src', src);
        img.classList.add('fade');

        observer.disconnect();
      }
    });

是否可以延迟加载作为通过Ajax加载的内容一部分的图像?

javascript lazy-loading intersection-observer
1个回答
1
投票

是的,有可能。在获取数据并更新DOM之后,您需要再次致电观察者。

const io = new IntersectionObserver((entries, observer) => {
  // console.log(entries)
  entries.forEach(entry => {
    console.log('😍');

    if (entry.isIntersecting) {

      console.log('intersecting');

      const img = entry.target;
      const src = img.getAttribute('data-lazy');

      img.setAttribute('src', src);
      img.classList.add('fade');

      observer.disconnect();
    }
  });
});

io.observe(document.querySelectorAll('ímg'));

const fethNewData = () => {
  // any ajax call
  window.fetch().then((html) => {
    //update DOM
    document.querySelector('body').innerHTML = html;
    //call observe again
    io.observe(document.querySelectorAll('ímg'));
  })
};
© www.soinside.com 2019 - 2024. All rights reserved.