как сделать аккордеон в jquery

#javascript #php #jquery

#javascript #php #jquery

Вопрос:

Я пытаюсь создать динамический аккордеон с помощью jquery, который позволяет мне открывать только один элемент за раз, когда открывается другой, предыдущий закрывается, на данный момент мне удалось только открыть его и заставить кнопку исчезнуть при его открытии, но я не могу заставить старый элемент открыться.закрывается при открытии нового. Класс кнопки для открытия — «vermas», и при нажатии на нее он меняется на «vermas active», и отображается содержимое, как я могу закрыть содержимое при открытии нового? Я надеюсь, что вы сможете мне помочь.

 <?php
// Seccion relaciones publicas

$icono__relaciones__publicas  = get_field( 'icono__relaciones__publicas' );
$titulo__relaciones__publicas = get_field( 'titulo__relaciones__publicas' );
$texto__relaciones__publicas  = get_field( 'texto__relaciones__publicas' );

// Seccion proyectos destacados
$imagen__proyecto__destacado    = get_field( 'imagen__proyecto__destacado' );
$titulo__proyecto__destacado    = get_field( 'titulo__proyecto__destacado' );
$subtitulo__proyecto__destacado = get_field( 'subtitulo__proyecto__destacado' );
$texto__proyecto__destacado     = get_field( 'texto__proyecto__destacado' );

// Seccion algunos datos
$titulo__algunos__datos       = get_field( 'titulo__algunos__datos' );

// Seccion elige tu marca
$titulo__marca__noticia       = get_field( 'titulo__marca__noticia' );
$link__boton__marca__noticia  = get_field( 'link__boton__marca__noticia' );

$args = array(
    'post_type' => 'soluciones',
    'order' => 'ASC',
    'posts_per_page' => 15
);
$query = new WP_Query($args);

?>
<?php get_header(); ?>

<?php get_template_part('template_parts/banner-servicios') ?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    <section class="section">
        <div class="container">
            <!-- -->

            <div class="section__body__soluciones">

                <div class="container">
                    <?php if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();?>  

                    <div class="lista__servicios__reiva">

                        <div class="row">

                            <div class="col-xl-3 col-lg-3 col-md-3 col-sm-3 col-3">
                                <?php if (get_field('icono')): ?>
                                    <img src="<?php echo get_field('icono') ?>" alt="" class="banner-graphic__ico">
                                <?php endif; ?>
                            </div>
                            <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-8 order-md-1">
                                <div class="content__servicios">
                                    <h3 class="c-overlay-big__title"><?php the_title(); ?></h3>
                                    <?php the_excerpt(); ?>
                                    <div class="vermas">
                                        Ver más
                                    </div>
                                    <div class="row mt-5" style="display: none;" >
                    <div class="col-xl-4 col-lg-4 col-md-4 col-sm-4 col-12">
                        <div class="lista__relaciones__publicas">
                            <ul>
                                <li>Estrategias de comunicación en medios de comunicación</li>
                                <li>Marketing de influencers</li>
                                <li>Prevención y manejo de crisis</li>
                                <li>Media training</li>
                            </ul>
                        </div>
                        <!-- -->
                    </div>
                    <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-12">
                        <div class="proyecto__destacado__publico">
                            <img src="<?php echo $imagen__proyecto__destacado; ?>" alt="">
                            <div class="proyecto__destacado">
                                <h3><?php echo $titulo__proyecto__destacado; ?></h3>
                                <h4><?php echo $subtitulo__proyecto__destacado; ?></h4>
                               <p class="contenidoslistaservicio">El evento cultural más importante del Perú se reinventa, llevando de manera virtual, cultura a todos los rincones del país.</p>
                                <a href="#"  class="btn__vermas">Saber más</a>
                            </div>
                            <br><br>
                            <!-- -->

                        </div>

                    </div>

                </div>
                                </div>
                                <!-- -->

                            </div>
                            
                        </div>
                        <!-- -->

                    </div>
                    <!-- -->
                    <?php endwhile; else: ?>
                        <p>Datos vacios.</p>
                    <?php endif;
                    wp_reset_postdata();
                    ?> 
                    </div>
                </div>
                <!-- -->
                
            </div>
            <!-- -->
                
        </div>
        <!-- -->

    </section>

   
    <!-- -->

   <section class="seccion__marca__noticia">
        <div id="encabezado">
            <h4>Hagamos que tu<br>marca sea <span>noticia</span></h4>
            <a href="http://nomadasdigital.com/contacto/" class="btn__vermas">
                Conversemos
            </a>            
        </div>
        <!-- -->
        
    </section>
    <!-- -->

    <div id="scrollUp">
      <img src="<?php echo get_template_directory_uri(); ?>/assets/img/arrow-scroll.png" alt="">
    </div>

<script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script>
<script>    
  function main(){
  $(".row mt-5").hide();
  $(".proyecto__destacado__publico").fadeIn(2000);
  $(".row mt-5").hide();
  // button accordion toggle
      $('.row mt-5').not('.vermas   .active').hide();
$(".vermas").click(function(){
    //$(this).next().toggle();
     if($(this).hasClass('.active')){
       $(this).removeClass('.active');
       $(this).next().slideUp();
   }
    else{
     $('.vermas').removeClass('.active');
     $(this).addClass(".active");
     $('.vermas active').slideUp();
     $(this).next().slideDown();
    }
  });
}
$(document).ready(main);

    
</script>



<?php endwhile; ?>
<?php endif; ?>

<?php get_footer(); ?>
 

Ответ №1:

[1] Если вы придерживаетесь, slideUp/slideDown вы можете использовать slideToggle()

 function main(){
  $(".row mt-5").hide();
  $(".proyecto__destacado__publico").fadeIn(2000);
  $(".row mt-5").hide();
  // button accordion toggle
  $('.row mt-5').not('.vermas   .active').hide();
$(".vermas").click(function(){
    $(".vermas").not($(this)).removeClass('active').next('div').slideUp(); // remove active class from other `vermas` elements but not this one
    $(this).toggleClass('active').next('div').slideToggle();  // toggle the class here
  });
}
$(document).ready(main); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section class="section">
    <div class="container">
        <!-- -->

        <div class="section__body__soluciones">

            <div class="container">
                <?php if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();?>  

                <div class="lista__servicios__reiva">

                    <div class="row">

                        <div class="col-xl-3 col-lg-3 col-md-3 col-sm-3 col-3">
                            <?php if (get_field('icono')): ?>
                                <img src="<?php echo get_field('icono') ?>" alt="" class="banner-graphic__ico">
                            <?php endif; ?>
                        </div>
                        <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-8 order-md-1">
                            <div class="content__servicios">
                                <h3 class="c-overlay-big__title"><?php the_title(); ?></h3>
                                <?php the_excerpt(); ?>
                                <div class="vermas">
                                    Ver más
                                </div>
                                <div class="row mt-5" style="display:none;">
                <div class="col-xl-4 col-lg-4 col-md-4 col-sm-4 col-12">
                    <div class="lista__relaciones__publicas">
                        <ul>
                            <li>Estrategias de comunicación en medios de comunicación</li>
                            <li>Marketing de influencers</li>
                            <li>Prevención y manejo de crisis</li>
                            <li>Media training</li>
                        </ul>
                    </div>
                    <!-- -->
                </div>
                <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-12">
                    <div class="proyecto__destacado__publico">
                        <img src="<?php echo $imagen__proyecto__destacado; ?>" alt="">
                        <div class="proyecto__destacado">
                            <h3><?php echo $titulo__proyecto__destacado; ?></h3>
                            <h4><?php echo $subtitulo__proyecto__destacado; ?></h4>
                           <p class="contenidoslistaservicio">El evento cultural más importante del Perú se reinventa, llevando de manera virtual, cultura a todos los rincones del país.</p>
                            <a href="#"  class="btn__vermas">Saber más</a>
                        </div>
                        <br><br>
                        <!-- -->

                    </div>

                </div>

            </div>
                            </div>
                            <!-- -->

                        </div>

                    </div>
                    <!-- -->

                </div>
                <!-- -->
                <?php endwhile; else: ?>
                    <p>Datos vacios.</p>
                <?php endif;
                wp_reset_postdata();
                ?> 
                </div>
            </div>
            <!-- -->

        </div>
        <!-- -->

    </div>
    <!-- -->

</section>


<!-- -->

<section class="seccion__marca__noticia">
    <div id="encabezado">
        <h4>Hagamos que tu<br>marca sea <span>noticia</span></h4>
        <a href="http://nomadasdigital.com/contacto/" class="btn__vermas">
            Conversemos
        </a>            
    </div>
    <!-- -->

</section>
<!-- -->

<div id="scrollUp">
  <img src="<?php echo get_template_directory_uri(); ?>/assets/img/arrow-scroll.png" alt="">
</div>

<section class="section">
    <div class="container">
        <!-- -->

        <div class="section__body__soluciones">

            <div class="container">
                <?php if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();?>  

                <div class="lista__servicios__reiva">

                    <div class="row">

                        <div class="col-xl-3 col-lg-3 col-md-3 col-sm-3 col-3">
                            <?php if (get_field('icono')): ?>
                                <img src="<?php echo get_field('icono') ?>" alt="" class="banner-graphic__ico">
                            <?php endif; ?>
                        </div>
                        <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-8 order-md-1">
                            <div class="content__servicios">
                                <h3 class="c-overlay-big__title"><?php the_title(); ?></h3>
                                <?php the_excerpt(); ?>
                                <div class="vermas">
                                    Ver más
                                </div>
                                <div class="row mt-5" style="display:none;">
                <div class="col-xl-4 col-lg-4 col-md-4 col-sm-4 col-12">
                    <div class="lista__relaciones__publicas">
                        <ul>
                            <li>Estrategias de comunicación en medios de comunicación</li>
                            <li>Marketing de influencers</li>
                            <li>Prevención y manejo de crisis</li>
                            <li>Media training</li>
                        </ul>
                    </div>
                    <!-- -->
                </div>
                <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-12">
                    <div class="proyecto__destacado__publico">
                        <img src="<?php echo $imagen__proyecto__destacado; ?>" alt="">
                        <div class="proyecto__destacado">
                            <h3><?php echo $titulo__proyecto__destacado; ?></h3>
                            <h4><?php echo $subtitulo__proyecto__destacado; ?></h4>
                           <p class="contenidoslistaservicio">El evento cultural más importante del Perú se reinventa, llevando de manera virtual, cultura a todos los rincones del país.</p>
                            <a href="#"  class="btn__vermas">Saber más</a>
                        </div>
                        <br><br>
                        <!-- -->

                    </div>

                </div>

            </div>
                            </div>
                            <!-- -->

                        </div>

                    </div>
                    <!-- -->

                </div>
                <!-- -->
                <?php endwhile; else: ?>
                    <p>Datos vacios.</p>
                <?php endif;
                wp_reset_postdata();
                ?> 
                </div>
            </div>
            <!-- -->

        </div>
        <!-- -->

    </div>
    <!-- -->

</section>


<!-- -->

<section class="seccion__marca__noticia">
    <div id="encabezado">
        <h4>Hagamos que tu<br>marca sea <span>noticia</span></h4>
        <a href="http://nomadasdigital.com/contacto/" class="btn__vermas">
            Conversemos
        </a>            
    </div>
    <!-- -->

</section>
<!-- -->

<div id="scrollUp">
  <img src="<?php echo get_template_directory_uri(); ?>/assets/img/arrow-scroll.png" alt="">
</div> 

[2] Вы также можете сделать это с помощью простого css element element это означает next в css и использовать javascript для переключения класса

Следующий код, работающий с max-height not display , поэтому не забудьте удалить style="display:none" из следующего div vermas и убедитесь, что в скрытом / отображаемом div нет полей или отступов, потому max-height что он не будет работать должным образом, если у него есть поля / отступы

 function main(){
  $(".row mt-5").hide();
  $(".proyecto__destacado__publico").fadeIn(2000);
  $(".row mt-5").hide();
  // button accordion toggle
  $('.row mt-5').not('.vermas   .active').hide();
$(".vermas").click(function(){
    $(".vermas").not($(this)).removeClass('active'); // remove active class from other `vermas` elements but not this one
    $(this).toggleClass('active');  // toggle the class here
  });
}
$(document).ready(main); 
 .vermas   div{
  overflow : hidden;
  max-height : 0px;
  transition-duration : 0.5s;
}
.vermas.active   div{
  max-height : 1000px;
  transition-duration : 0.5s;
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section class="section">
    <div class="container">
        <!-- -->

        <div class="section__body__soluciones">

            <div class="container">
                <?php if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post();?>  

                <div class="lista__servicios__reiva">

                    <div class="row">

                        <div class="col-xl-3 col-lg-3 col-md-3 col-sm-3 col-3">
                            <?php if (get_field('icono')): ?>
                                <img src="<?php echo get_field('icono') ?>" alt="" class="banner-graphic__ico">
                            <?php endif; ?>
                        </div>
                        <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-8 order-md-1">
                            <div class="content__servicios">
                                <h3 class="c-overlay-big__title"><?php the_title(); ?></h3>
                                <?php the_excerpt(); ?>
                                <div class="vermas">
                                    Ver más
                                </div>
                                <div class="row mt-5">
                <div class="col-xl-4 col-lg-4 col-md-4 col-sm-4 col-12">
                    <div class="lista__relaciones__publicas">
                        <ul>
                            <li>Estrategias de comunicación en medios de comunicación</li>
                            <li>Marketing de influencers</li>
                            <li>Prevención y manejo de crisis</li>
                            <li>Media training</li>
                        </ul>
                    </div>
                    <!-- -->
                </div>
                <div class="col-xl-8 col-lg-8 col-md-8 col-sm-8 col-12">
                    <div class="proyecto__destacado__publico">
                        <img src="<?php echo $imagen__proyecto__destacado; ?>" alt="">
                        <div class="proyecto__destacado">
                            <h3><?php echo $titulo__proyecto__destacado; ?></h3>
                            <h4><?php echo $subtitulo__proyecto__destacado; ?></h4>
                           <p class="contenidoslistaservicio">El evento cultural más importante del Perú se reinventa, llevando de manera virtual, cultura a todos los rincones del país.</p>
                            <a href="#"  class="btn__vermas">Saber más</a>
                        </div>
                        <br><br>
                        <!-- -->

                    </div>

                </div>

            </div>
                            </div>
                            <!-- -->

                        </div>

                    </div>
                    <!-- -->

                </div>
                <!-- -->
                <?php endwhile; else: ?>
                    <p>Datos vacios.</p>
                <?php endif;
                wp_reset_postdata();
                ?> 
                </div>
            </div>
            <!-- -->

        </div>
        <!-- -->

    </div>
    <!-- -->

</section>


<!-- -->

<section class="seccion__marca__noticia">
    <div id="encabezado">
        <h4>Hagamos que tu<br>marca sea <span>noticia</span></h4>
        <a href="http://nomadasdigital.com/contacto/" class="btn__vermas">
            Conversemos
        </a>            
    </div>
    <!-- -->

</section>
<!-- -->

<div id="scrollUp">
  <img src="<?php echo get_template_directory_uri(); ?>/assets/img/arrow-scroll.png" alt="">
</div>