JS Module

y2-ajax Framework

Carregamento dinâmico de conteúdo via fetch com suporte a trigger click/load/hover, efeito fade, reinicialização automática dos módulos Y2 no destino e API estática.

1. Como funciona

Adicione y2-ajax em qualquer elemento. Ao disparar o trigger, o data-y2-ajax busca a URL, injeta o HTML no destino e cuida de tudo automaticamente: executa scripts, injeta CSS e reinicializa todos os módulos Y2 - como se fosse um carregamento de página completo.

1. Trigger
click / load / hover
2. fetch(url)
GET ou POST
3. Injetar HTML
dest.innerHTML = html
4. Scripts + CSS
exec <script> + inject <style>
5. Reinit
Y2.reinit(dest)
6. Evento
yd:ajax:done

Scripts executam automaticamente

Qualquer <script> no HTML injetado é re-executado (inline ou externo). Scripts externos já carregados não são duplicados. Isso significa que a página de destino pode ter seu próprio JS e ele vai funcionar normalmente.

CSS da página carregada — preservado

Se a resposta for uma página completa (com <body>), o data-y2-ajax injeta os <link> e <style> dela no <head> atual - sem duplicar o que já existe.

2. Triggers

3 modos de disparo - click, load automático e hover prefetch.

click (padrão)

load - carrega ao entrar na página

hover - pré-carrega no mouseover

Resumo dos atributos

y2-ajax ativa o módulo
y2-url URL a buscar
y2-dest seletor CSS do destino
y2-trigger click | load | hover
y2-method GET (padrão) | POST
y2-effect fade (padrão) | none
y2-ajax-push atualiza history.pushState

3. Efeitos de Entrada

Use y2-effect para animar o conteúdo ao ser injetado. O destino recebe .is-ldg durante o carregamento e .y2-fx-{efeito} ao injetar.

/* Estado de loading - personalize como quiser */
#box.is-ldg { opacity: .4; pointer-events: none; }

Fade (5)

Slide (4)

Básicos (9)

Flip (4)

Avançados (9)

Clique em qualquer efeito acima ✨

4. AJAX Interno

Com y2-src o conteúdo é copiado de uma DIV oculta na própria página - sem requisição HTTP.

Use <template> ou <div style="display:none"> como fonte. Após a injeção, Y2.reinit() é chamado automaticamente.

Demo - AJAX Interno

Clique em uma tab acima ✨

5. API JavaScript

Dispare carregamentos programaticamente sem HTML declarativo.

// Carregar conteúdo via GET
Y2Ajax.load('/api/lista', '#resultado');

// Com opções
Y2Ajax.load('/api/lista', '#resultado', {
    effect: 'fade',   // 'fade' | 'none'
    push: true        // atualiza a URL no navegador
});

// POST com dados
Y2Ajax.post('/api/salvar', { nome: 'João', idade: 30 }, '#resposta');

// POST com FormData (upload de arquivo)
const fd = new FormData(document.querySelector('#meuForm'));
Y2Ajax.post('/api/upload', fd, '#resultado');
// Eventos disponíveis no elemento trigger
el.addEventListener('yd:ajax:start', ({ detail }) => {
    console.log('Buscando:', detail.url);
    showSpinner();
});

el.addEventListener('yd:ajax:done', ({ detail }) => {
    console.log('Concluído. Destino:', detail.dest);
    hideSpinner();
});

el.addEventListener('yd:ajax:error', ({ detail }) => {
    console.error('Erro:', detail.err);
    Y2Alert.err('Falha ao carregar conteúdo.', 5000);
});

6. Padrões Reais

Casos de uso comuns em aplicações.

Tabs com AJAX

Widget auto-carregado

Paginação via AJAX

POST com feedback

// Enviar form via JS com feedback
async function salvarForm() {
    const fd = new FormData(document.querySelector('#form'));

    document.querySelector('#form')
        .addEventListener('yd:ajax:done', () => {
            Y2Alert.ok('Dados salvos!', 3000, 'tr');
        }, { once: true });

    Y2Ajax.post('/api/salvar', fd, '#resposta');
}

7. Reinit Automático

Após cada carregamento, Y2.reinit(dest) é chamado automaticamente - todos os módulos Y2 no novo conteúdo são inicializados sem nenhuma configuração extra.

Se o servidor retornar HTML com botões y2modal, alertas y2alert, código data-y2code ou qualquer outro componente Y2 - eles serão inicializados automaticamente.

Isso inclui: y2modal, y2alert, Y2Code, Y2Anime, Y2Nav e qualquer módulo registrado via Y2.use().

// Manual: reinicializar módulos em um container específico
Y2.reinit(document.querySelector('#meu-container'));

// Global: reinicializar tudo
Y2.reinit();

8. Quick Reference

Atributo Valores Padrão Descrição
y2-ajax - - Ativa o módulo no elemento
y2-url string href do link URL a buscar via HTTP
y2-src seletor CSS - Fonte interna (DIV/template local, sem HTTP)
y2-dest seletor CSS - Onde injetar o HTML
y2-trigger click / load / hover click Quando disparar
y2-method GET / POST GET Método HTTP
y2-effect fade — slideLeft — slideRight — slideTop — slideBottom — zoom — scale — bounce — elastic — flip — flipX — rotate — pulse — shake — swing — tada — rubberBand — rollIn — heartBeat — fadeDown — none fade Animação de entrada ao injetar
y2-ajax-push booleano false Atualiza URL (pushState)
Método estático Parâmetros Descrição
Y2Ajax.load() url, dest, opts? GET e injeta no destino
Y2Ajax.post() url, data, dest, opts? POST com FormData ou objeto