Lazy load de imagem Componentes
A foto só é baixada quando está chegando perto da tela — com um carregando girando no lugar enquanto ela não chega.
O que é
Página com muitas fotos (galeria, cardápio, catálogo, portfólio) fica lenta porque o navegador baixa todas de uma vez, até as que estão lá embaixo. Com sw-lazy, cada foto espera: ela só começa a baixar quando a pessoa rola até perto dela. Enquanto isso, aparece um pequeno círculo girando no lugar, e quando a foto chega ela surge com um leve esmaecer.
Você coloca o endereço da foto em sw-lazy-src (e não em src). O SWCore vigia a página e, quando a foto fica a uns 200 px de aparecer, baixa o arquivo; só depois de ele estar inteiro troca a imagem e tira o carregando. Tudo automático: vem no arquivo principal, sem configuração.
Quando usar
- Galerias e catálogos com mais de uma tela de fotos.
- Fotos no meio ou no fim da página (depoimentos, equipe, portfólio).
- Não use na foto grande do topo da página (a primeira coisa que a pessoa vê): ela deve carregar normal, com
src, para aparecer o mais rápido possível.
Comece aqui
-
1
Coloque o SWCore na página (CSS no
<head>, JS no fim do<body>).<link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css"> <!-- fim do <body> --> <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script> -
2
Na imagem, troque
srcporsw-lazy-srce acrescentesw-lazy. Sempre comalt,widtheheight.<img sw-lazy sw-lazy-src="/fotos/morangos.webp" width="600" height="400" alt="Morangos frescos numa tigela">
Todas as variações
Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.
1. Uma foto
As fotos destes quadros vêm da internet e só começam a baixar quando você chega perto. Em conexão lenta dá para ver o círculo girando antes de a foto aparecer.
<img sw-lazy sw-lazy-src="https://picsum.photos/id/1025/600/400" width="600" height="400" alt="Cachorro deitado">
<img sw-lazy sw-lazy-src="https://picsum.photos/id/1027/400/600" width="400" height="600" alt="Pessoa sorrindo">
<img sw-lazy sw-lazy-src="https://picsum.photos/id/1062/500/500" width="500" height="500" alt="Cachorro de óculos">
<div class="r-m ov-hi">
<img sw-lazy sw-lazy-src="https://picsum.photos/id/1069/600/400" width="600" height="400" alt="Água-viva no mar escuro">
</div>
2. Galeria
Numa grade, cada foto espera a sua vez. Role a página devagar: as de baixo só baixam quando você chega nelas.
<div class="l l-3 gap-3">
<img sw-lazy sw-lazy-src="/fotos/1.webp" width="600" height="400" alt="Rio entre montanhas">
<img sw-lazy sw-lazy-src="/fotos/2.webp" width="600" height="400" alt="Cânion ao pôr do sol">
<img sw-lazy sw-lazy-src="/fotos/3.webp" width="600" height="400" alt="Montanhas com neve">
<!-- … -->
</div>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Na imagem | ||
sw-lazy | Liga o carregamento tardio na <img>. Não recebe valor. | <img sw-lazy …> |
sw-lazy-src | Endereço da foto de verdade. É ela que será baixada quando chegar perto da tela. Obrigatório. | sw-lazy-src="/fotos/prato.webp" |
width / height | Tamanho original da foto (atributos normais do HTML). Não são do SWCore, mas evitam que a página "pule" quando a foto chega. | width="600" height="400" |
alt | Descrição da foto. Aparece para leitores de tela e para o Google. | alt="Bolo de chocolate" |
| Colocados pelo SWCore (você não escreve) | ||
[sw-lazy-wrap] | Moldura que o SWCore põe em volta da imagem, só para segurar o carregando. Some junto com ele. | |
[sw-lazy-spin] | O círculo girando enquanto a foto não chega. | |
.is-ldd | Classe que a imagem ganha quando a foto chegou (é ela que faz a foto aparecer). | |
.is-err | Classe que a imagem ganha quando a foto não pôde ser baixada. | |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
<div class="l l-2 gap-4">
<figure class="bg-sur bd r-m ov-hi m-0">
<img sw-lazy sw-lazy-src="/cardapio/salada.webp" width="600" height="400" alt="Salada da casa">
<figcaption class="p-m"><strong>Salada da casa</strong> — R$ 32</figcaption>
</figure>
<figure class="bg-sur bd r-m ov-hi m-0">
<img sw-lazy sw-lazy-src="/cardapio/frutas.webp" width="600" height="400" alt="Frutas do dia">
<figcaption class="p-m"><strong>Frutas do dia</strong> — R$ 18</figcaption>
</figure>
</div>
<script>
// foto que falhou mostra o src provisório (ou o alt): troque por uma imagem reserva
document.addEventListener('sw:lazy:error', (e) => {
const img = e.target;
img.src = '/img/sem-foto.webp';
});
// saber quando cada foto chegou (ex.: contar, animar)
document.addEventListener('sw:lazy:loaded', (e) => {
console.log('carregou', e.target.currentSrc);
});
</script>
<!-- topo: carrega na hora, com prioridade -->
<img src="/img/banner.webp" width="1600" height="700" alt="Fachada da loja" fetchpriority="high">
<!-- mais abaixo: lazy -->
<img sw-lazy sw-lazy-src="/img/equipe.webp" width="800" height="500" alt="Nossa equipe">
Eventos
sw:lazy:loaded<img> (e.target) e sobe até o document.sw:lazy:erroris-err e continua à mostra com o src provisório (ou o texto do alt, se não tiver).Precisa de quê
swcore.min.csseswcore.min.js— já vem no pacote principal.
Cuidados — erros comuns
- O endereço vai em
sw-lazy-src. Escreversw-lazy="/foto.jpg"não faz nada: osw-lazysó liga o recurso. - Colocar o mesmo endereço também em
srcfaz a foto baixar na hora — aí o lazy não serve para nada. Nosrc, só uma miniatura leve (ou nada). - Um
srcprovisório "leve" (miniatura borrada de poucos KB) aparece enquanto a foto definitiva não chega. Semsrc, o lugar fica vazio com o círculo girando. - Sem
widtheheight, a página "pula" quando cada foto chega. Escreva o tamanho original da foto. - Se a foto não existir, fica o
srcprovisório ou, sem ele, o ícone de imagem quebrada do navegador com oalt. Use o eventosw:lazy:errorpara pôr uma reserva (receita acima). - Tamanho/cantos definidos por classe na própria
<img>podem não valer: o SWCore envolve a imagem numa moldura e força largura 100%. Ponha a classe num elemento em volta (como no quadro "cantos arredondados").
O que ele não faz
- Só vale para
<img>. Foto de fundo feita com CSS (background-image) não é atrasada. - Não escolhe tamanhos diferentes por tela (
srcset): baixa sempre o endereço desw-lazy-src.

