延迟加载只加载第一张图片

阿列扎赫尔

急需帮助!我正在尝试使用 vanilla javascript 向我的项目添加延迟加载功能,但它只加载第一个图像,其他图像保持模糊而不加载。

这是脚本:

// Lazy loading images
const imgTargets = document.querySelectorAll('img[data-src]');

const loadImg = function (entries, observer) {
  const [entry] = entries;

  if (!entry.isIntersecting) return;

  // Replace src with data-src
  entry.target.src = entry.target.dataset.src;

  entry.target.addEventListener('load', function () {
    entry.target.classList.remove('lazy-img');
  });

  observer.unobserve(entry.target);
};

const imgObserver = new IntersectionObserver(loadImg, {
  root: null,
  threshold: 0,
  rootMargin: '200px',
});

imgTargets.forEach(img => imgObserver.observe(img));

HTML 代码:

<div class="popup swiper-slide swiper-slide2 first-non" style="background: transparent;">
        <img class="lazy-img fetures__img" 
        src="assets/theme/images/laz-non-legendary-1.png"
        data-src="assets/theme/images/non-legendary-1.png" />
      </div>
      <div class="popup swiper-slide swiper-slide2 first-non" style="background: transparent;">
        <img class="lazy-img fetures__img" 
        src="assets/theme/images/laz-non-legendary-2.png"
        data-src="assets/theme/images/non-legendary-2.png" />
      </div>
      <div class="popup swiper-slide swiper-slide2 first-non" style="background: transparent;">
        <img class="lazy-img fetures__img" 
        src="assets/theme/images/laz-non-legendary-3.png"
        data-src="assets/theme/images/non-legendary-3.png" />
      </div>

这是用于模糊效果的 CSS:

.lazy-img {
  filter: blur(20px);
}
纳扬

图片来源

entry.target.src = entry.target.dataset.src.replace("w=10&", "w=800&");

根据需要控制阈值

threshold: 0.2

脚本代码

// Lazy loading images
const imgTargets = document.querySelectorAll('img[data-src]');

const loadImg = function (entries, observer) {
  const [entry] = entries;

  if (!entry.isIntersecting) return;

  // Replace src with data-src
  entry.target.src = entry.target.dataset.src.replace("w=10&", "w=800&");

  entry.target.addEventListener('load', function () {
    entry.target.classList.remove('lazy-img');
  });

  observer.unobserve(entry.target);
};

const imgObserver = new IntersectionObserver(loadImg, {
  root: null,
  threshold: 0.2,
  rootMargin: '200px',
});

imgTargets.forEach(img => imgObserver.observe(img));

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Wordpress中删除第一张图片上的延迟加载

PHP从多个来源加载第一张图片

幻灯片的第一张图片未加载

解析不加载tableview中的第一张图片

为什么缩放效果只适用于第一张图片?

为什么下面的代码只提取第一张图片的 ID 名称?

从本地上传img文件到幻灯片,第一张图片加载,第二张不加载

在导航中成为第一张图片

Wordpress - 在第一张图片后显示代码

获取每个产品的第一张图片

从提要内容中删除第一张图片

Angular 删除第一张图片

使用新的DOMDocument()获取第一张图片

Image_tag第一张图片

jQuery:在第一张图片/第一张图片的div之后插入div

多次加载同一张图片

用户在删除第一张图片之前上传第二张图片

Javascript代码将最后一张图片移动到多张图片之间的第一张图片

离开图片后,如何重置html图片库以第一张图片开头?

我正在尝试从与 id 相关的表中获取第一张图片,但不幸的是获取所有图片而不是第一张图片

如何隐藏第一张图片的左箭头和最后一张图片的右箭头

如何在第一张幻灯片中添加按钮以加载下一张幻灯片?

如何在多标签页上的标签加载上显示第一张幻灯片

第一张图片显示弹出窗口,而不是其他图片

多张图片,无法从数组中获取第一张图片

图片库将第一张图片放大

显示第一张图片,不显示其他图片

加载下一张图片时保留上一张图片

在加载另一张图片时显示另一张图片