Código JavaScript para Criar Tabs Customizadas com Widget Button + Container no Elementor - Bruno Devx - BR Criativus

post #4448

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:



Link Direto

Compartilhe esse conteudo nas redes sociais ou por mensagem usando o link direto abaixo. Basta copiar.

bruno.art.br/?p=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