need help badly! I’m trying to add a lazy load feature to my project using vanilla javascript but it only loads the first image and other images remain blurred and not loading.
Here is script:
JavaScript
x
26
26
1
// Lazy loading images
2
const imgTargets = document.querySelectorAll('img[data-src]');
3
4
const loadImg = function (entries, observer) {
5
const [entry] = entries;
6
7
if (!entry.isIntersecting) return;
8
9
// Replace src with data-src
10
entry.target.src = entry.target.dataset.src;
11
12
entry.target.addEventListener('load', function () {
13
entry.target.classList.remove('lazy-img');
14
});
15
16
observer.unobserve(entry.target);
17
};
18
19
const imgObserver = new IntersectionObserver(loadImg, {
20
root: null,
21
threshold: 0,
22
rootMargin: '200px',
23
});
24
25
imgTargets.forEach(img => imgObserver.observe(img));
26
HTML CODE:
JavaScript
1
16
16
1
<div class="popup swiper-slide swiper-slide2 first-non" style="background: transparent;">
2
<img class="lazy-img fetures__img"
3
src="assets/theme/images/laz-non-legendary-1.png"
4
data-src="assets/theme/images/non-legendary-1.png" />
5
</div>
6
<div class="popup swiper-slide swiper-slide2 first-non" style="background: transparent;">
7
<img class="lazy-img fetures__img"
8
src="assets/theme/images/laz-non-legendary-2.png"
9
data-src="assets/theme/images/non-legendary-2.png" />
10
</div>
11
<div class="popup swiper-slide swiper-slide2 first-non" style="background: transparent;">
12
<img class="lazy-img fetures__img"
13
src="assets/theme/images/laz-non-legendary-3.png"
14
data-src="assets/theme/images/non-legendary-3.png" />
15
</div>
16
Here’s CSS just for blur effect:
JavaScript
1
4
1
.lazy-img {
2
filter: blur(20px);
3
}
4
Advertisement
Answer
Image src
JavaScript
1
2
1
entry.target.src = entry.target.dataset.src.replace("w=10&", "w=800&");
2
Control threshold based on need
JavaScript
1
2
1
threshold: 0.2
2
Script Code
JavaScript
1
26
26
1
// Lazy loading images
2
const imgTargets = document.querySelectorAll('img[data-src]');
3
4
const loadImg = function (entries, observer) {
5
const [entry] = entries;
6
7
if (!entry.isIntersecting) return;
8
9
// Replace src with data-src
10
entry.target.src = entry.target.dataset.src.replace("w=10&", "w=800&");
11
12
entry.target.addEventListener('load', function () {
13
entry.target.classList.remove('lazy-img');
14
});
15
16
observer.unobserve(entry.target);
17
};
18
19
const imgObserver = new IntersectionObserver(loadImg, {
20
root: null,
21
threshold: 0.2,
22
rootMargin: '200px',
23
});
24
25
imgTargets.forEach(img => imgObserver.observe(img));
26