post

Código JavaScript para Criar Tabs Customizadas com Widget Button + Container no Elementor

Publicado em: 19/02/2024 / Atualizado em: 19/02/2024

Categorias: BlogElementorJavaScript (JS)JSWordpress

Se você quer criar um sistema de Tabs customizadas no Elementor, para não ficar preso a solução do widget padrão (tabs) do Elementor, segue abaixo uma solução inovadora, que pode te ajudar muito.

Basicamente, você vai trazer um container onde vai ficar os botões, e outro container, para ser o principal dos demais container dentro dele. A estrutura ficará mais ou menos assim:

image 17

Acima temos o container “Botões Cursos (Tabs)” e logo em seguida o container “Curso #1 (Tabs)“, onde fica os outros container de seções customizadas da página.

No primeiro botão, adicione o ID btn-openss-1 e a CLASS btn-ativo, assim, este botão ficará com a apareceria de ativo (você pode customizar o CSS dele depois).

image 13

Para os próximos botões, apenas adicione o ID btn-openss com a sequencia numérica adequada. Ex: btn-openss-2, btn-openss-3, assim por diante, quantos botões e seções quiser criar. Como mostra abaixo:

image 14

Agora que nossos botões estão funcionando perfeitamente, precisamos atribuir um conteúdo para eles exibirem ou ocultarem. Para isso, adicione no seu container “pai”, o ID div-openss-1, assim ele vai ser referenciado ao botão btn-openss-1 automaticamente. Veja abaixo:

image 15

Para os outros containers, você precisa adicionar uma CLASS hidden, para que eles fiquem ocultos, e somente apareça quando o respectivo botão atribuído a eles for clicado. Veja:

image 18

Sua estrutura ficará mais ou menos assim:

image 19

Agora, você precisa adicionar o código customizado (JS + CSS) que vai fazer a mágica acontecer. Segue código abaixo:

<style>
.hidden {
    display: none;
}

.btn-ativo a {
    border: 2px solid #F60 !important;
background: #E85320 !important;
}
</style>

<script>
document.addEventListener('DOMContentLoaded', function() {
    // Função para mostrar uma div, esconder as outras, atualizar o botão ativo e rolar suavemente até a div
    function showDiv(targetDivId, event) {
        event.preventDefault(); // Previne o comportamento padrão do link

        // Seleciona todas as divs que devem ser controladas
        var divs = document.querySelectorAll('[id^="div-openss-"]');
        // Seleciona todos os contêineres de botão
        var buttonContainers = document.querySelectorAll('.elementor-widget-button[id^="btn-openss-"]');

        divs.forEach(function(div) {
            if (div.id === targetDivId) {
                div.classList.remove('hidden');
                // Aguarda até que a mudança de visibilidade seja aplicada
                setTimeout(() => {
                    div.scrollIntoView({ behavior: 'smooth', block: 'start' });
                }, 0);
            } else {
                div.classList.add('hidden');
            }
        });

        buttonContainers.forEach(function(container) {
            if (container.id === 'btn-openss-' + targetDivId.split('-')[2]) {
                container.classList.add('btn-ativo');
            } else {
                container.classList.remove('btn-ativo');
            }
        });
    }

    // Adiciona o ouvinte de eventos a cada link dentro dos contêineres de botão
    document.querySelectorAll('.elementor-widget-button[id^="btn-openss-"] .elementor-button-link').forEach(function(button, index) {
        button.addEventListener('click', function(event) {
            // O ID do botão é baseado no contêiner, não no link diretamente
            var buttonContainerId = button.closest('.elementor-widget-button').id;
            // Constrói o ID da div correspondente com base no índice do botão
            var targetDivId = 'div-openss-' + (index + 1).toString();
            showDiv(targetDivId, event);
        });
    });
});
</script>


<script>
jQuery(document).ready(function() {
  jQuery('a[href="#"]').click(function(e) {
    e.preventDefault();
  });
});
</script>

Neste exemplo, eu adicionei ele dentro do widget HTML do Elementor, na página mesmo, segue abaixo:

image 20

Assim, eu sei que esse código se refere apenas esta seção/página, mas é possível adicionar globalmente com o “adicionar código customizado” do Elementor PRO, ou outro plugin de código global.

Publicações recomendadas:


Inscreva-se em Nossa News:

Seja notificando sempre que tiver conteúdo novo disponível no meu canal do Youtube ou artigo no meu Blog.

Bruno Devs News


Link Curto para Compartilhamento

Compartilhe esse conteudo nas redes sociais ou por mensagem usando o link curto abaixo. Basta clicar em cima do link para copiar.

bruno.art.br/pb/4448

ID de Referência: 4448

Sugira uma publicação

Envie uma mensagem e sugira um publicação sobre um assunto que tenha dificuldades de resolver.

Clique aqui e entre em contato


Comentários