Foros del Web » Programando para Internet » Jquery »

[SOLUCIONADO] Pasar de un li a otro

Estas en el tema de Pasar de un li a otro en el foro de Jquery en Foros del Web. Me gustaría que al hacer clic sobre una flecha o la otra pase al otro li, alguna idea? Gracias. Código HTML: <a href= "#" class= ...
  #1 (permalink)  
Antiguo 02/01/2015, 05:39
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Pasar de un li a otro

Me gustaría que al hacer clic sobre una flecha o la otra pase al otro li, alguna idea?

Gracias.

Código HTML:
<a href="#" class="leftBtn"><i class="fa fa-angle-left fa-4x"></i></a>
     <ul>
            <li  id="1">
                   <div class="info">
                            <h3>Un toque de fachada</h3>
                   </div>
             </li>
            <li  id="2">
                   <div class="info">
                            <h3>Un toque de fachada</h3>
                   </div>
             </li>
            <li  id="3">
                   <div class="info">
                            <h3>Un toque de fachada</h3>
                   </div>
             </li>
     </ul>
<a href="#" class="rightBtn"><i class="fa fa-angle-right fa-4x"></i></a> 
  #2 (permalink)  
Antiguo 04/01/2015, 10:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Pasar de un li a otro

Cuando dices "Me gustaría que al hacer clic sobre una flecha o la otra pase al otro li", ¿a qué te refieres exactamente? ¿A que el siguiente elemento <li> tome el enfoque? ¿A que se mueva? ¿A que tome un color diferente para indicarle al usuario que ahora vea a ese?

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 04/01/2015, 11:43
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 5 meses
Puntos: 44
Respuesta: Pasar de un li a otro

Si lo que querés es cambiar el li activo (al menos yo entendí eso) podrías hacer algo como esto:

Código HTML:
 <a href="#" class="leftBtn"><i class="fa fa-angle-left fa-4x"></i></a>
     <ul>
            <li  id="1" class="active">
                   <div class="info">
                            <h3>Un toque de fachada 1</h3>
                   </div>
             </li>
            <li  id="2">
                   <div class="info">
                            <h3>Un toque de fachada 2</h3>
                   </div>
             </li>
            <li  id="3">
                   <div class="info">
                            <h3>Un toque de fachada 3</h3>
                   </div>
             </li>
     </ul>
	<a href="#" class="rightBtn"><i class="fa fa-angle-right fa-4x"></i></a> 
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.         $(".leftBtn, .rightBtn").click(function(e){
  3.             e.preventDefault();
  4.             var accion = $(this).hasClass("leftBtn") ? "restar" : "sumar";
  5.            
  6.             $.each( $("li"), function() {
  7.               if ($(this).attr("class") == "active") {
  8.                 $(this).removeClass("active");
  9.                 var liId = parseInt($(this).attr("id"));
  10.                
  11.                 if (accion == "sumar") {
  12.                     liId++;
  13.                 } else {
  14.                     liId--;
  15.                 }
  16.                
  17.                 if (liId > $("li").length) {
  18.                     liId = 1;
  19.                 } else if (liId < 1) {
  20.                     liId = 3;
  21.                 }
  22.                
  23.                 $("#" + liId).addClass("active");
  24.                 return false;
  25.               }
  26.             });
  27.         });
  28.     });

Deberías definir con CSS si esa clase active da un determinado color de fondo o lo que necesites hacer.

Seguramente habrá formas más óptimas de hacer el código, pero un domingo a esta hora mucho más no pude hacer :P

Saludos
  #4 (permalink)  
Antiguo 04/01/2015, 18:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Pasar de un li a otro

Otra opción:

Código HTML:
Ver original
  1. <ul>
  2.     <li class = "focus">Ítem 1</li>
  3.     <li>Ítem 2</li>
  4.     <li>Ítem 3</li>
  5. </ul>
  6. <label id = "at">Atrás</label>
  7. <label id = "ad">Adelante</label>

Código CSS:
Ver original
  1. .focus{
  2.     border: .1rem cornflowerblue solid;
  3. }

Código Javascript:
Ver original
  1. //Para avanzar
  2. $("#ad").on("click", function(){
  3.     var actual = $("li.focus"),
  4.         sig = actual.next().is("li") ? actual.next() : $("li").first();
  5.     actual.removeClass("focus");
  6.     sig.addClass("focus");
  7. });
  8.  
  9. //Para retroceder
  10. $("#at").on("click", function(){
  11.     var actual = $("li.focus"),
  12.         sig = actual.prev().is("li") ? actual.prev() : $("li").last();
  13.     actual.removeClass("focus");
  14.     sig.addClass("focus");
  15. });

De esta forma, para el botón de avance, tomas al siguiente elemento <li> o al primero en caso de haber llegado al final, se retira la clase focus del elemento actual y se la asigna la siguiente. Para el botón de retroceso, el proceso es inverso, solo cambian los métodos para obtener al elemento <li> anterior o al último, según sea el caso.

DEMO

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 08/01/2015, 07:34
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Pasar de un li a otro

Perdón por no contestar, gracias a todos por contestar estuve fuera de casa.

Voy a probar vuestros códigos.

Gracias

Última edición por manelmanel8; 08/01/2015 a las 07:50
  #6 (permalink)  
Antiguo 08/01/2015, 08:44
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Pasar de un li a otro

Tengo un problema, a ver si lo explico bien.

Tengo un primer div con 6 li al hacer clic en un li guardo su posición en la variable position y la utilizo para cargar el li del otro div. Si en el primer div hago clic en el li 1, en el otro segundo div cargo el li 1.

Código Javascript:
Ver original
  1. $(".cosas li").click(function() {
  2.             var position = $(this).index();
  3.             $(".cosas").hide();
  4.             $(".systems-gallery").show();
  5.             $(".systems-gallery li").hide();
  6.             $(".systems-gallery li:eq("+ position +")").show();    
  7.                     return position;
  8.         });

El problema como utilizar la variable position en esta función?

Código Javascript:
Ver original
  1. $(".rightBtn").click(function() {
  2.  
  3.         });

Saludos
  #7 (permalink)  
Antiguo 08/01/2015, 10:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Pasar de un li a otro

Te conviene tener a esa variable en un ámbito global (declárala fuera del método), de manera que luego puedes trabajar con dicho valor en la función a la que haces mención.

Por cierto, ya no sería necesario que retornes el valor.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #8 (permalink)  
Antiguo 09/01/2015, 06:49
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Pasar de un li a otro

Lo de la variable global funciono perfecto, tengo el último problema y ya lo tendré perfecto.

La lista la tengo oculta y cuando apretó al botón siguiente hago aparecer el siguiente li con show. Como podría hacer para ocultar el li anterior. Es decir si apretó y voy al li 4, quiero ocultar el li 3.

Código Javascript:
Ver original
  1. $(".rightBtn").click(function() {
  2.             var actual = $("li.focus"),
  3.             sig = actual.next().is("li") ? actual.next() : $("li").first();
  4.             actual.removeClass("focus");
  5.             sig.addClass("focus");     
  6.             $(".focus").show();        
  7.         });

Esta línea no la acabo de entender, bueno el ? y los :

Código Javascript:
Ver original
  1. sig = actual.next().is("li") ? actual.next() : $("li").first();

Gracias por vuestra ayuda.
  #9 (permalink)  
Antiguo 09/01/2015, 06:54
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 5 meses
Puntos: 44
Respuesta: Pasar de un li a otro

Código Javascript:
Ver original
  1. sig = actual.next().is("li") ? actual.next() : $("li").first();

Esa línea que no entendiste es un operador ternario. Es una versión resumida de un if. Lo que significa es que si el siguiente elemento del li actual es otro li, que levante el siguiente li para avanzar, y sino, el primero de ellos. Por qué hace esto? Porque cuando llegues al último li, si haces un next(), el siguiente elemento va a ser la ul y no un li.

Para ocultar podrías hacer algo así:

Código Javascript:
Ver original
  1. $(".rightBtn").click(function() {
  2.             var actual = $("li.focus"),
  3.             sig = actual.next().is("li") ? actual.next() : $("li").first();
  4.             actual.removeClass("focus");
  5.             actual.hide(); // Acá ocultas
  6.             sig.addClass("focus");      
  7.             $(".focus").show();        
  8.         });

Saludos :)
  #10 (permalink)  
Antiguo 09/01/2015, 08:25
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Pasar de un li a otro

Como bien te lo dijo GeekGirl, es un operador ternario, el cual funciona así:

Código Bash:
Ver original
  1. condición ? verdadero : falso

Por lo que esto:

Código Javascript:
Ver original
  1. sig = actual.next().is("li") ? actual.next() : $("li").first();

Puedes tenerlo así:

Código Javascript:
Ver original
  1. if (actual.next().is("li")){
  2.     sig = actual.next();
  3. }
  4. else{
  5.     sig = $("li").first();
  6. }

Para lo otro, pues, ya te lo dijeron. Y para cuando retrocedas, sería exactamente lo mismo, es decir, tendrías que ocultar al elemento actual.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 11/01/2015, 11:20
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Pasar de un li a otro

Tienes razón cuando llego al final, luego no aparece el primer li.

He probado diferentes cosas y no consigo mostrar el primer li, la última cosa que probé fue lo siguiente, añadiendo al li firt la clase focus pero nada de nada.

¿Qué hace falta para cuando llegue al último vuelva a empezar?

Gracias


Código Javascript:
Ver original
  1. $(".rightBtn").click(function() {
  2.             var actual = $("li.focus"),
  3.             sig = actual.next().is("li") ? actual.next() : $("li").first().addClass("focus");
  4.             actual.removeClass("focus");
  5.             actual.hide();
  6.             sig.addClass("focus");     
  7.             sig.show();        
  8.         });
  #12 (permalink)  
Antiguo 11/01/2015, 13:20
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Pasar de un li a otro

No debes de agregar la clase en esa parte, recuerda que ahí solo estás tomando al siguiente elemento o al primero si estás en el final. Fíjate que más abajo se le añade la clase.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #13 (permalink)  
Antiguo 11/01/2015, 14:32
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Pasar de un li a otro

Ya, era una prueba... Lo que no entiendo es porque cuando llega al final no vuelve al principio.

La única diferencia es que tengo los li al principio en hide y muestro cada li al hacer clic

Código Javascript:
Ver original
  1. $(".rightBtn").click(function() {
  2.             var actual = $("li.focus"),
  3.             sig = actual.next().is("li") ? actual.next() : $("li").first();
  4.             actual.removeClass("focus");
  5.             actual.hide();
  6.             sig.addClass("focus");     
  7.             sig.show();        
  8.         });
  #14 (permalink)  
Antiguo 11/01/2015, 16:29
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 5 meses
Puntos: 44
Respuesta: Pasar de un li a otro

No te funciona? Probé el mismo código que pegaste y me anduvo sin problema alguno.
Pasanos el HTML también tal cual como está así podemos ver el problema.
  #15 (permalink)  
Antiguo 12/01/2015, 03:27
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Pasar de un li a otro

El motivo no entiendo porque no funciona.

Código HTML:
Ver original
  1. <section class="content">
  2.         <div class="general-cosas">
  3.         <p class="label">Características</p>
  4.         <h3>Hola</h3>
  5.         <p>universal</p>
  6.             <article class="cosas">
  7.                 <ul class="systems">
  8.                     <li>
  9.                         <figure>
  10.                             <div>
  11.                               <img src="images/li1.jpg" height="285px"/>
  12.                                 <a href="#" class="readmoreBtn"><i class="fa fa-plus-square-o fa-4x"></i></a>
  13.                                 <figcaption>
  14.                                     <div class="title-box">
  15.                                         <h2 class="overtext">1<br>Cuadro</h2>
  16.                                     </div>
  17.                                 </figcaption>
  18.  
  19.                             </div>
  20.                         </figure>
  21.                     </li>
  22.                     <li>
  23.                         <figure>
  24.                             <div>
  25.                               <img src="images/li1.jpg" height="285px"/>    
  26.                                 <a href="#" class="readmoreBtn"><i class="fa fa-plus-square-o fa-4x"></i></a>                            
  27.                                 <figcaption>
  28.                                     <div class="title-box">
  29.                                         <h2 class="overtext">2<br>Cuadro</h2>
  30.                                     </div>
  31.                                 </figcaption>
  32.                             </div>
  33.                         </figure>
  34.                     </li>
  35.                     <li>
  36.                         <figure>
  37.                             <div>
  38.                               <img src="images/li1.jpg" height="285px"/>  
  39.                                 <a href="#" class="readmoreBtn"><i class="fa fa-plus-square-o fa-4x"></i></a>                                
  40.                                 <figcaption>
  41.                                     <div class="title-box">
  42.                                         <h2 class="overtext">3<br>Cuadro</h2>
  43.                                     </div>
  44.                                 </figcaption>
  45.                             </div>
  46.                         </figure>
  47.                     </li>
  48.                     <li>
  49.                         <figure>
  50.                             <div>
  51.                               <img src="images/li1.jpg" height="285px"/>  
  52.                                 <a href="#" class="readmoreBtn"><i class="fa fa-plus-square-o fa-4x"></i></a>                                
  53.                                 <figcaption>
  54.                                     <div class="title-box">
  55.                                         <h2 class="overtext">4<br>Cuadro</h2>
  56.                                     </div>
  57.                                 </figcaption>
  58.                             </div>
  59.                         </figure>
  60.                     </li>
  61.                     <li>
  62.                         <figure>
  63.                             <div>
  64.                               <img src="images/li1.jpg" height="285px"/>  
  65.                                 <a href="#" class="readmoreBtn"><i class="fa fa-plus-square-o fa-4x"></i></a>                                
  66.                                 <figcaption>
  67.                                     <div class="title-box">
  68.                                         <h2 class="overtext">5<br>Cuadro</h2>
  69.                                     </div>
  70.                                 </figcaption>
  71.                             </div>
  72.                         </figure>
  73.                     </li>
  74.                     <li>
  75.                         <figure>
  76.                             <div>
  77.                               <img src="images/li1.jpg" height="285px"/>    
  78.                                 <a href="#" class="readmoreBtn"><i class="fa fa-plus-square-o fa-4x"></i></a>  
  79.                                 <figcaption>
  80.                                     <div class="title-box">
  81.                                         <h2 class="overtext">6<br>Cuadro</h2>
  82.                                     </div>
  83.                                 </figcaption>
  84.                             </div>
  85.                         </figure>
  86.                     </li>
  87.                 </ul>
  88.             </article>
  89.             <article class="systems-gallery">
  90.                 <span class="close-systems-container"><i class="fa fa-close fa-3x"></i></span>
  91.                 <div class="systems-container">
  92.                     <label class="leftBtn"><i class="fa fa-angle-left fa-4x"></i></label>
  93.                     <ul>
  94.                         <li>
  95.                             <div class="info">
  96.                                 <h3>Nuevo cuadro 1</h3>
  97.                             </div>
  98.                         </li>
  99.                         <li>
  100.                             <div class="info">
  101.                                 <h3>Nuevo cuadro 2</h3>
  102.                             </div>
  103.                         </li>
  104.                         <li>
  105.                             <div class="info">
  106.                                 <h3>Nuevo cuadro 3</h3>
  107.                             </div>
  108.                         </li>
  109.                         <li>
  110.                             <div class="info">
  111.                                 <h3>Nuevo cuadro 4</h3>
  112.                             </div>
  113.                         </li>  
  114.                         <li>
  115.                             <div class="info">
  116.                                 <h3>Nuevo cuadro 5</h3>
  117.                             </div>
  118.                         </li>
  119.                         <li>
  120.                             <div class="info">
  121.                                 <h3>Nuevo cuadro 6</h3>
  122.                             </div>
  123.                         </li>                          
  124.                     </ul>
  125.                     <label class="rightBtn"><i class="fa fa-angle-right fa-4x"></i></label>                    
  126.                 </div>
  127.             </article>
  128.         </div>
  129.     </section>

Código Javascript:
Ver original
  1. var position;
  2.  
  3. $(".systems-gallery").hide();      
  4.         $(".cosas li").click(function() {
  5.             position = $(this).index();
  6.             $(".cosas").hide();
  7.             $(".systems-gallery").show();
  8.             $(".systems-gallery li").hide();
  9.             $(".systems-gallery li:eq("+ position +")").show();
  10.             $(".systems-gallery li:eq("+ position +")").addClass("focus");         
  11.         });
  12.                    
  13.         $(".close-systems-container").click(function() {
  14.             $(".systems-gallery").hide();  
  15.             $(".cosas").show();            
  16.         });
  17.        
  18.         $(".rightBtn").click(function() {
  19.             var actual = $("li.focus"),
  20.             sig = actual.next().is("li") ? actual.next() : $("li").first();
  21.             actual.removeClass("focus");
  22.             actual.hide();
  23.             sig.addClass("focus");     
  24.             sig.show();        
  25.         });
  #16 (permalink)  
Antiguo 12/01/2015, 09:49
Avatar de GeekGirl  
Fecha de Ingreso: julio-2014
Mensajes: 423
Antigüedad: 10 años, 5 meses
Puntos: 44
Respuesta: Pasar de un li a otro

No funciona porque en tu HTML tenés otros li además de los que necesitás. Haciendo un pequeño cambio anda sin problemas. Agregá un identificador a la ul contenedora de los li que querés ir intercambiando:

Código HTML:
 <ul id="listaCuadros">
                        <li>
                            <div class="info">
                                <h3>Nuevo cuadro 1</h3>
                            </div>
                        </li>
                        <li>
                            <div class="info">
                                <h3>Nuevo cuadro 2</h3>
                            </div>
                        </li>
                        <li>
                            <div class="info">
                                <h3>Nuevo cuadro 3</h3>
                            </div>
                        </li>
                        <li>
                            <div class="info">
                                <h3>Nuevo cuadro 4</h3>
                            </div>
                        </li>   
                        <li>
                            <div class="info">
                                <h3>Nuevo cuadro 5</h3>
                            </div>
                        </li>
                        <li>
                            <div class="info">
                                <h3>Nuevo cuadro 6</h3>
                            </div>
                        </li>                           
                    </ul> 
Y luego modificá en el JS de la siguiente manera:

Código Javascript:
Ver original
  1. sig = actual.next().is("li") ? actual.next() : $("#listaCuadros li").first();

No te pasaba al primero, porque estaba tomando el primer elemento li del documento, que no es el primer li de tus cuadros.

Saludos :)
  #17 (permalink)  
Antiguo 12/01/2015, 12:05
 
Fecha de Ingreso: marzo-2012
Mensajes: 180
Antigüedad: 12 años, 9 meses
Puntos: 2
Respuesta: Pasar de un li a otro

Gracias a todos por vuestro tiempo.

Solucionado

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:30.