document.addEventListener("DOMContentLoaded", function () {
// Definisco i target
const targetsImg = document.querySelectorAll(".lazy-image");
const targetsVid = document.querySelectorAll("iframe.lazy-video");
// Se il Browser non è compatibile..
if (!('IntersectionObserver' in window)) {
//Carico le immagini normalmente
function caricaImg(image) {
image.src = image.dataset.src;
}
targetsImg.forEach(caricaImg);
//Carico i video normalmente
function caricaVid(video) {
video.src = video.dataset.src;
}
targetsVid.forEach(caricaVid);
// Se il Browser è compatibile inizio..
} else {
const options = {
threshold: [0, 0.5, 1]
}
/* ****** IMMAGINI LAZY LOAD***** */
//Instanzio observer per immagini
const observerImm = new IntersectionObserver(callbackImg, options);
targetsImg.forEach(target => observerImm.observe(target));
// Funzioni per le immagini
function fetchImage(url) {
return new Promise((resolve, reject) => {
const image = new Image();
image.src = url;
image.onload = resolve;
image.onerror = reject;
});
}
// Funzioni di callback
function callbackImg(entries) {
entries.forEach(entry => {
// calcolo la percentuale di sovrapposizione
const ratio = entry.intersectionRatio;
const element = entry.target;
// se l'elemento è visibile
if (ratio > 0) {
// rimuovo l'elemento dall'observer
observerImm.unobserve(element);
// recupero l'immagine e la carico a video
const src = element.dataset.src
fetchImage(src).then(() => {
element.src = element.dataset.src;
});
}
});
}
/* ****** VIDEO LAZY LOAD***** */
//Instanzio observer per i video
const observerVid = new IntersectionObserver(callbackVid, options);
targetsVid.forEach(target => observerVid.observe(target));
// Funzioni di callback
function callbackVid(entries) {
entries.forEach(entry => {
// calcolo la percentuale di sovrapposizione
const ratio = entry.intersectionRatio;
const element = entry.target;
// se l'elemento è visibile
if (ratio > 0) {
// rimuovo l'elemento dall'observer
observerVid.unobserve(element);
// recupero l'elemento e lo carico a video
const src = element.dataset.src
element.src = element.dataset.src;
}
});
}
}/*Fine else*/
}); /*Fine event lister*/