Não perca as nossas novidades!
Cadastre-se para ficar por dentro das tendências e promoções!
Utilizamos cookies para oferecer melhor experiência, melhorar o desempenho, analizar como você interage
em nosso site e personalizar conteúdo. Ao utilizar este site, você concorda com o uso de cookies
document.addEventListener("DOMContentLoaded", function() {
console.log("Manus AI: Script de lazy loading iniciado.");
// Função para aplicar o lazy load em uma imagem específica.
const lazyLoadImage = (img) => {
// Verifica se a imagem já tem o atributo loading="eager" ou a classe 'no-lazy'
// para garantir que a imagem LCP ou outras imagens críticas não sejam lazy-loaded.
if (img.getAttribute('loading') === 'eager' || img.classList.contains('no-lazy')) {
console.log(`Manus AI: Ignorando lazy loading para imagem crítica (loading=eager ou .no-lazy): ${img.src || img.getAttribute('data-original') || img.getAttribute('data-src')}`);
return;
}
// Verifica se o navegador suporta o atributo loading="lazy" nativamente.
if ('loading' in HTMLImageElement.prototype) {
img.setAttribute('loading', 'lazy');
console.log(`Manus AI: Aplicado loading="lazy" para: ${img.src || img.getAttribute('data-original') || img.getAttribute('data-src')}`);
// Se a imagem tem um 'data-original' ou 'data-src' e o 'src' não está definido ou é um placeholder,
// move o 'data-original'/'data-src' para 'src' para que o navegador com lazy loading nativo o use.
if (img.hasAttribute('data-original') && (!img.src || img.src.includes('placeholder') || img.src.includes('data:image/gif;base64'))) {
img.src = img.getAttribute('data-original');
console.log(`Manus AI: SRC atualizado para data-original (nativo): ${img.src}`);
} else if (img.hasAttribute('data-src') && (!img.src || img.src.includes('placeholder') || img.src.includes('data:image/gif;base64'))) {
img.src = img.getAttribute('data-src');
console.log(`Manus AI: SRC atualizado para data-src (nativo): ${img.src}`);
}
// Para imagens com srcset, também garante que o srcset seja carregado
if (img.hasAttribute('data-srcset') && !img.srcset) {
img.srcset = img.getAttribute('data-srcset');
console.log(`Manus AI: SRCSET atualizado para data-srcset (nativo): ${img.srcset}`);
}
} else {
// Fallback para navegadores mais antigos usando IntersectionObserver.
// Este observador só carrega a imagem quando ela entra na viewport.
const observer = new IntersectionObserver((entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const image = entry.target;
console.log(`Manus AI: IntersectionObserver: Imagem ${image.src || image.getAttribute('data-original') || image.getAttribute('data-src')} entrou na viewport.`);
if (image.hasAttribute('data-original')) {
image.src = image.getAttribute('data-original');
console.log(`Manus AI: IntersectionObserver: SRC atualizado para data-original: ${image.src}`);
} else if (image.hasAttribute('data-src')) {
image.src = image.getAttribute('data-src');
console.log(`Manus AI: IntersectionObserver: SRC atualizado para data-src: ${image.src}`);
}
if (image.hasAttribute('data-srcset')) {
image.srcset = image.getAttribute('data-srcset');
console.log(`Manus AI: IntersectionObserver: SRCSET atualizado para data-srcset: ${image.srcset}`);
}
// Remove o observador depois que a imagem é carregada.
observer.unobserve(image);
}
});
}, { rootMargin: '0px 0px 200px 0px' }); // Carrega 200px antes de entrar na viewport
observer.observe(img);
console.log(`Manus AI: IntersectionObserver aplicado para: ${img.src || img.getAttribute('data-original') || img.getAttribute('data-src')}`);
}
};
// Seleciona todas as imagens na página que podem se beneficiar do lazy loading.
// Exclui imagens que já possuem loading="eager" ou que são placeholders comuns (1x1 pixel gif, etc.)
// ou que já estão sendo carregadas (src já preenchido e não é placeholder).
const imagesToLazyLoad = document.querySelectorAll('img:not([loading="eager"])');
console.log(`Manus AI: Total de imagens candidatas a lazy loading encontradas: ${imagesToLazyLoad.length}`);
imagesToLazyLoad.forEach(img => {
// Verifica se a imagem já tem um src válido e não é um placeholder antes de aplicar o lazy load.
// Isso evita que imagens já carregadas sejam processadas desnecessariamente.
if (img.src && !img.src.includes('placeholder') && !img.src.includes('data:image/gif;base64')) {
console.log(`Manus AI: Imagem já carregada ou com SRC válido, ignorando lazy load: ${img.src}`);
return;
}
lazyLoadImage(img);
});
// Observa mudanças no DOM para aplicar lazy loading a imagens adicionadas dinamicamente.
const observerConfig = { childList: true, subtree: true };
const bodyObserver = new MutationObserver((mutationsList) => {
for (const mutation of mutationsList) {
if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
mutation.addedNodes.forEach(node => {
if (node.nodeType === 1 && node.tagName === 'IMG') {
console.log(`Manus AI: Nova imagem adicionada dinamicamente: ${node.src || node.getAttribute('data-original') || node.getAttribute('data-src')}`);
lazyLoadImage(node);
} else if (node.nodeType === 1) {
// Se o nó adicionado não for uma imagem, verifica se contém imagens.
const newImages = node.querySelectorAll('img');
newImages.forEach(img => {
console.log(`Manus AI: Nova imagem em nó adicionado dinamicamente: ${img.src || img.getAttribute('data-original') || img.getAttribute('data-src')}`);
lazyLoadImage(img);
});
}
});
}
}
});
bodyObserver.observe(document.body, observerConfig);
console.log("Manus AI: MutationObserver configurado para detectar novas imagens.");
});