2011-09-22 27 views
6

Así que tengo un div que puede tener varios divs dentro de él. Algo así como:¿Alterne entre divs dentro de otro div usando jQuery?

<div id="news">   
    <span>Latest News!</span>  
    <div> 
     //News 1  
    </div> 
    <div> 
     //News 2 
    </div> 
</div> 

Lo que estoy tratando de hacer es al cargar la página, la primera div es visible, a continuación, después de tantos segundos, se desvanece y el segundo div desvanece en Bastante simple con fadeIn y fadeOut. pero tengo que especificar las acciones de cada div. ¿Hay alguna manera de decir 'Alternar entre cada div dentro de mi #news div'? De esta forma, puedo agregar nuevos divs sin tener que agregar código para ocultarlos/mostrarlos.

Gracias!

+0

¿Están apareciendo en la misma ubicación? ¿Se ve uno detrás del otro durante el desvanecimiento? –

+0

Misma ubicación. Solo uno visible a la vez. – drpcken

Respuesta

2

intente lo siguiente

$(document).ready(function() { 
    $('#news div:gt(0)').hide(); 

    var swap = function(item) { 
     setTimeout(function() { 
      $(item).fadeOut(1000, function() { 
       var next = $(item).next()[0]; 
       if (!next) { 
        next = $('#news div')[0]; 
       } 

       $(next).fadeIn(1000, function() { 
        swap($(this)[0]); 
       }) 
        }); 
     }, 1000); 

    }; 

    swap($('#news div')[0]); 
}); 

violín: http://jsfiddle.net/9gwzt/2/

+0

Me gusta esto, pero no funciona. Significado cuando llega al último div, todos están ocultos. – drpcken

+1

@drpkcen no se dio cuenta de que era el comportamiento deseado. se actualizará en solo un segundo – JaredPar

+0

@drpcken ok, actualizado con el comportamiento de ciclismo – JaredPar

1

Usted podría tratar de usar jQueryUI, que tiene un control de ficha: http://jqueryui.com/demos/tabs/

de lo contrario podría dar todos los divs una clase común, por ejemplo "ficha". A continuación, para sus botones de ficha sólo puede tener:

$(".tab").fadeOut(); 
$("#tab-that-I-want").fadeIn(); 
3
// count the number of news items 
var len = $("#news div").length; 

// hide all but the first 
$("#news div:gt(0)").hide(); 

// set up a counter 
var counter = 0; 

// function to hide all except the current iteration 
function changeDiv() { 
    $("#news div").eq(counter).show().siblings("div").hide(); 
    counter++; 

    // when we reach the last one, start again 
    if(counter === len) { 
     counter = 0; 
    } 
} 

// go! 
var i = setInterval(changeDiv, 2000); 

Demo.

+0

¿Hay alguna manera de atenuar estas entradas y salidas? Reemplacé .hide() y .show() con fadeOut() y fadeIn() pero vuelve a fundirse en la línea siguiente, como si comenzara a desvanecerse antes de que el div anterior se desvanezca. ¡Gracias! – drpcken

1

Este bucle a través de los artículos de noticias. Cuando llegue al final, comenzará de nuevo en la parte superior. Cambie el 2000 al intervalo que desee (en ms).

function switchNewsItem(){ 
    $('#news div:visible').fadeOut(function(){ 
     $(this).next().length ? $(this).next().fadeIn() : $('#news div').eq(0).fadeIn(); 
    }); 
}; 
$('#news div').eq(0).show(); // show the first news item 
setInterval(switchNewsItem, 2000); 

See working example.

Cuestiones relacionadas