Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Victor Oliveira Franco

Dúvida - Filtro de <div> com css e javascript

Recommended Posts

Pessoal, estou tentando ocultar alguns itens e exibir um botão de reset, com um comando do javascript, mas o filtro não está funcionando adequadamente. Alguém pode me ajudar?

 

O HTML

<!-- Seçoes / Botões -->
<div class="container">
  <div class="row">
    <div class="col-12"><p class="small text-right">Selecione um dos itens da lista</p></div>
    <div class="col-4 text-center" onClick="btn01()">
      <img src="http://epmeditora.com.br/newsite/assets/imagens/svg/health.svg" alt="mala, bag, bagagem, icone, icon" class="icone-site" width="100px">
      <h4 class="cor1">Educação Médica Continuada</h4>
    </div>

    <div class="col-4 text-center" onClick="btn02()">
      <img src="http://epmeditora.com.br/newsite/assets/imagens/svg/dos.svg" alt="mala, bag, bagagem, icone, icon" class="icone-site" width="100px">
      <h4 class="cor1">Projetos Médicos</h4>
    </div>

    <div class="col-4 text-center" onClick="btn03()">
      <img src="http://epmeditora.com.br/newsite/assets/imagens/svg/graphic.svg" alt="mala, bag, bagagem, icone, icon" class="icone-site" width="100px">
      <h4 class="cor1">Comercialização de Publicidade</h4>
    </div>
  </div>
  
  <!-- Separador -->
  <hr />
  
  <!-- Iténs do filtro -->
  <div class="container">
    <div class="row text-center">
    <div class="col-12"><p class="small text-right">Itens filtrados</p></div>
      <div class="col-12 col-sm-3 projeto-emc" id="projeto-emc">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/seminarios-em-ortopedia.jpg" class="figure-img img-fluid" alt="">
          <small>Projeto - Educação Médica Continuada</small>
      </div>
      <div class="col-12 col-sm-3 projeto-emc" id="projeto-emc">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/seminarios-em-ortopedia.jpg" class="figure-img img-fluid" alt="">
          <small>Projeto - Educação Médica Continuada</small>
      </div>
      <div class="col-12 col-sm-3 projeto-emc" id="projeto-emc">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/seminarios-em-ortopedia.jpg" class="figure-img img-fluid" alt="">
          <small>Projeto - Educação Médica Continuada</small>
      </div>

      <div class="col-12 col-sm-3 projeto-cp" id="projeto-cp">
        <div class="bg-secao boder-t-cor3">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/artigos-comentados.jpg" class="figure-img img-fluid" alt="">
          <small>Projetos Médicos</small>
        </div>
      </div>
      <div class="col-12 col-sm-3 projeto-cp" id="projeto-cp">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/artigos-comentados.jpg" class="figure-img img-fluid" alt="">
          <small>Projetos Médicos</small>
      </div>
      <div class="col-12 col-sm-3 projeto-cp" id="projeto-cp">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/artigos-comentados.jpg" class="figure-img img-fluid" alt="">
          <small>Projetos Médicos</small>
      </div>

      <div class="col-12 col-sm-3 projeto-pm" id="projeto-pm">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/50-faq.jpg" class="figure-img img-fluid" alt="">
          <small>Projeto - Comercialização de Publicidade</small>
      </div>
      <div class="col-12 col-sm-3 projeto-pm" id="projeto-pm">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/50-faq.jpg" class="figure-img img-fluid" alt="">
          <small>Projeto - Comercialização de Publicidade</small>
      </div>
      <div class="col-12 col-sm-3 projeto-pm" id="projeto-pm">
          <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/50-faq.jpg" class="figure-img img-fluid" alt="">
          <small>Projeto - Comercialização de Publicidade</small>
      </div>

      <div class="col-12 col-sm-3 reset" id="reset">
        <div class="bg-secao boder-t-cor2">
          BOTAO RESET
        </div>
      </div>
    </div>
  </div>

 

o CSS

.cor1{color:#3d92cd;}
#projeto-ems{display:block;}
#projeto-cp{display:block;}
#projeto-pm{display:block;}
#reset{display:none;}

 

o JAVASCRIPT

function btn01(){
    document.getElementById("projeto-emc").style.display="block";
    document.getElementById("pprojeto-cp").style.display="none";
    document.getElementById("projeto-pm").style.display="none";
    document.getElementById("reset").style.display="block";
}
function btn02(){
    document.getElementById("projeto-emc").style.display="none";
    document.getElementById("pprojeto-cp").style.display="block";
    document.getElementById("projeto-pm").style.display="none";
    document.getElementById("reset").style.display="block";
}
function btn03(){
    document.getElementById("projeto-emc").style.display="none";
    document.getElementById("pprojeto-cp").style.display="none";
    document.getElementById("projeto-pm").style.display="block";
    document.getElementById("reset").style.display="block";
}
function btn04(){
    document.getElementById("projeto-emc").style.display="none";
    document.getElementById("pprojeto-cp").style.display="none";
    document.getElementById("projeto-pm").style.display="none";
    document.getElementById("reset").style.display="block";
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Victor, acompanhe as alterações que fiz no seu código:

 

<div class="container">
        <div class="row">
            <div class="col-12">
                <p class="small text-right">Selecione um dos itens da lista</p>
            </div>
            <div class="col-4 text-center" onClick="filter('projeto-emc')">
                <img src="http://epmeditora.com.br/newsite/assets/imagens/svg/health.svg" alt="mala, bag, bagagem, icone, icon" class="icone-site"
                    width="100px">
                <h4 class="cor1">Educação Médica Continuada</h4>
            </div>

            <div class="col-4 text-center" onClick="filter('projeto-cp')">
                <img src="http://epmeditora.com.br/newsite/assets/imagens/svg/dos.svg" alt="mala, bag, bagagem, icone, icon" class="icone-site"
                    width="100px">
                <h4 class="cor1">Projetos Médicos</h4>
            </div>

            <div class="col-4 text-center" onClick="filter('projeto-pm')">
                <img src="http://epmeditora.com.br/newsite/assets/imagens/svg/graphic.svg" alt="mala, bag, bagagem, icone, icon" class="icone-site"
                    width="100px">
                <h4 class="cor1">Comercialização de Publicidade</h4>
            </div>
        </div>

        <!-- Separador -->
        <hr />

        <!-- Iténs do filtro -->
        <div class="container">
            <div class="row text-center">
                <div class="col-12">
                    <p class="small text-right">Itens filtrados</p>
                </div>
                <div class="col-12 col-sm-3 item projeto-emc">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/seminarios-em-ortopedia.jpg" class="figure-img img-fluid" alt="">
                    <small>Projeto - Educação Médica Continuada</small>
                </div>
                <div class="col-12 col-sm-3 item projeto-emc">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/seminarios-em-ortopedia.jpg" class="figure-img img-fluid" alt="">
                    <small>Projeto - Educação Médica Continuada</small>
                </div>
                <div class="col-12 col-sm-3 item projeto-emc">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/seminarios-em-ortopedia.jpg" class="figure-img img-fluid" alt="">
                    <small>Projeto - Educação Médica Continuada</small>
                </div>

                <div class="col-12 col-sm-3 item projeto-cp">
                    <div class="bg-secao boder-t-cor3">
                        <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/artigos-comentados.jpg" class="figure-img img-fluid" alt="">
                        <small>Projetos Médicos</small>
                    </div>
                </div>
                <div class="col-12 col-sm-3 item projeto-cp">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/artigos-comentados.jpg" class="figure-img img-fluid" alt="">
                    <small>Projetos Médicos</small>
                </div>
                <div class="col-12 col-sm-3 item projeto-cp">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/artigos-comentados.jpg" class="figure-img img-fluid" alt="">
                    <small>Projetos Médicos</small>
                </div>

                <div class="col-12 col-sm-3 item projeto-pm">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/50-faq.jpg" class="figure-img img-fluid" alt="">
                    <small>Projeto - Comercialização de Publicidade</small>
                </div>
                <div class="col-12 col-sm-3 item projeto-pm">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/50-faq.jpg" class="figure-img img-fluid" alt="">
                    <small>Projeto - Comercialização de Publicidade</small>
                </div>
                <div class="col-12 col-sm-3 item projeto-pm">
                    <img src="http://epmeditora.com.br/newsite/assets/imagens/jpg/50-faq.jpg" class="figure-img img-fluid" alt="">
                    <small>Projeto - Comercialização de Publicidade</small>
                </div>

                <div class="col-12 col-sm-3 reset" id="reset">
                    <div class="bg-secao boder-t-cor2">
                        <button onclick="reset();">Botão de Reset</button>
                    </div>
                </div>
            </div>
        </div>
    </div>

Como você pode ter reparado, inseri a classe "item" em todos os elementos da filtragem, e os id's dos elementos agora estão como classes também, lembre-se, o ID cria uma identidade única para um elemento, e do ponto de vista de vista de semântica e acessibilidade só   pode ser atribuído a um único elemento por isso substituí por classes.

 

Já o javascript ficou da seguinte maneira:

function filter(el){
  var itens = document.getElementsByClassName('item');

  for(var i = 0; i < itens.length; i++){
    if(itens[i].classList.contains(el)){
      itens[i].style.display="block";
    }
    else{
      itens[i].style.display="none";
    }
  }
  document.getElementById("reset").style.display="block";
};

function reset(){
  var itens = document.getElementsByClassName('item');

  for(var i = 0; i < itens.length; i++){
    itens[i].style.display="block";
  }
  document.getElementById("reset").style.display="none";
};

Como você pode ver, criei uma função genérica chamada "filter" que recebe como parâmetro a classe dos elementos que você quer que apareçam após a filtragem, e criei uma outra função chamada "reset" que remove a filtragem e exibe novamente todos os itens.
Mas lembre-se, essa é apenas uma das várias maneiras de fazer, com tempo e estudo você vai ver que algumas libs e frameworks facilitam e muito a nossa vida na hora de fazer esse tipo de coisa.

 

Qualquer coisa estou a disposição para sanar dúvidas.  :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá.
      Estou atualizando meu conhecimento com Front-End e me deparei com o seguinte problema.
      Criei um sistema para fazer o upload de imagens e alguns campos text.
      Algo bem simples para depois começar a estudar javascript para mostrar a miniatura....
      Mas quando saio do navegador Chrome ou da aba por mais de 3 minutos, ao retornar o navegador as vezes atualiza ou nem chega atualizar mas limpa os campos.
      Estou usando um Smart Motorola com Android, mas um amigo testou no iPhone e acontece a mesma coisa.
      Gostaria de saber se há como usar javascript para evitar isso?
      Agradeço desde já.

      <!DOCTYPE html>
      <html>
      <head>
          <meta charset="utf-8">
          <meta name="viewport" content="width=device-width, initial-scale=1">
          <title>Uploader</title>
      </head>
      <body>
          <form action="?" method="post" enctype="multipart/form-data">
              <br><br>
              <div>selecione a imagem 1</div>
              <input type="file" name="foto1" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem1">
              
              <br><br>
              <input type="file" name="foto2" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem2">
              
              <br><br>

              <input type="file" name="foto3" accept="image/*">
              <br><br>
              <input type="text" name="nome_imagem3">
              
              <br><br>
              <input type="submit" value="Enviar">
              <br><br>
          </form>
      <?php
      if ($_SERVER['REQUEST_METHOD'] == 'POST')
      {
          vardump ($_FILES);
      }
      ?>
      </body>
      </html>
       
       
       
    • Por belann
      Olá!
       
      Estou usando o nextjs versão 15.2.3 e criei uma navbar que quando é carregado o programa aparece com a home, mas na hora de clicar na página produtos desaparece a navbar.
      A navbar esta sendo chamada no layout.tsx estou usando typescript
      e fica dessa forma
      <div>           <Navbar/>             <main>{children}</main>             </div>  
    • Por ILR master
      Fala pessoal, tudo bem?
       
      Eu tenho o seguinte código:
       
      <script>
         $(function(){
      var jElement = $('.fixar_banner');
      $(window).scroll(function(){
          if ( $(this).scrollTop() > 120 ){
              jElement.css({
                  'position':'fixed',
                  'top':'10px'
              });
          }else{
              jElement.css({
                  'position':'relative',
                  'top':'auto'
              });
          }
      });
      });
      </script>
       
      Porém, eu quero que a div fique fixa até que outro elemento apareça na tela, tipo o rodapé da página por exemplo. É mais ou menos como a página de notícia do uol.
      https://noticias.uol.com.br/internacional/ultimas-noticias/2025/01/19/sonho-americano-brasileiros-moram-em-carro-e-buscam-comida-no-lixo-nos-eua.htm
       
      Espero ter sido claro.
       
      Obrigado :)
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.