Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

100
Vistas
Cómo recorrer la función jQuery .next none -top

Estoy tratando de recorrer y desplazar automáticamente cada elemento de un grupo de elementos a la parte superior de la página con la función jQuery .next . Sin embargo, la función desplaza solo el primer elemento, se detiene y no se repite.

 $(function() { setInterval(function() { var $next = $('.per-account:first').next('.per-account'); var $first = $('.per-account:first'); if ($next.length) { $('html, body').animate({ scrollTop: $next.offset().top }, 1000); } else { $('html, body').animate({ scrollTop: $first.offset().top }, 1000); } }, 3000) });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="per-account" style="height: 500px; width: 100%; background: red;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: blue;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: orange;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: green;"> </div>

el primer elemento y se detiene. Cualquier idea de lo que estoy haciendo mal aquí.

Mi código se ve a continuación:

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Siempre obtienes el siguiente elemento después de :first , lo que significa que siempre es el segundo elemento, no el bucle.

Agregue una clase al elemento actual y luego obtenga el siguiente elemento después de eso.

 $(function() { setInterval(function() { var $current = $('.per-account.current') var $next = $current.next('.per-account'); if (!$next.length) { // wrap around to the beginning $next = $('.per-account:first'); } $current.removeClass('current'); $next.addClass('current'); $('html, body').animate({ scrollTop: $next.offset().top }, 1000); }, 3000) });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="per-account current" style="height: 500px; width: 100%; background: red;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: blue;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: orange;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: green;"> </div>

about 4 years ago · Juan Pablo Isaza Denunciar

0

El siguiente código hará que funcione. Empezabas desde el primero en cada intervalo.

 $(function() { function runScroll(){ let $current = $('.per-account:first'); const id = setInterval(runInterval, 1000); function runInterval(){ if ( $current.next('.per-account').length ){ $current = $current.next('.per-account'); $('html, body').animate({ scrollTop: $current.offset().top }, 500); } else { clearInterval(id); } } } runScroll(); // Re-run to scroll again });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="per-account" style="height: 500px; width: 100%; background: red;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: blue;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: orange;"> </div> <div class="per-account" style="height: 500px; width: 100%; background: green;"> </div>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda