2010-05-31 5 views
2

J'ai essayé d'obtenir cet effet pendant quelques heures maintenant et je dois admettre que j'y échoue. J'essaie de construire un DIV qui accepte un certain nombre d'éléments (disons 5), lorsque le 6ème élément est ajouté, le premier élément qui a été ajouté devrait être supprimé (premier entré, premier sorti). La sensation devrait avoir une sorte de fadeIn et fadeOut. Voici ce que je réussi à écrire jusqu'à présent:jQuery: Déplacement de type fenêtre (ou FIFO) DIV?

... 
//Create a ul element with id 'ulele' and add it to a div 
... 
//Do an ajax call and when an element arrives 
Hash = ComputeHash(message) 
if(!$("#" + Hash).exists()) { 
    var element = $("<li></li>").html(message).attr('id', Hash).prependTo("#ulele"); 
    $("#" + Hash).hide().delay(10000 - 1000 * messageNumber).show("slow"); 
    _this.prune("#ulele"); 
} 
... 
prune: function(divid) { 
    $("#" + divid).children().each(
    function(i, elemLi) { 
     if(i >= maxMessages) 
     $(this).delay(10000).hide("slow").delay(10000).remove(); 
     } 
); 
} 

J'ai essayé quelques variations, mais l'effet final que je reçois est pas celle d'un FIFO. Les éléments disparaissent instantanément malgré les appels delay et hide("slow"). Quelqu'un a une approche plus directe?

Répondre

2

Essayez ceci:

Hash = ComputeHash(message) 
if(!$("#" + Hash).exists()) { 
    var element = $("<li></li>").html(message).attr('id', Hash).hide().prependTo("#ulele"); 
    $("#" + Hash).show("slow", function() { 
    _this.prune("#ulele"); 
    }); 
} 
... 
prune: function(divid) { 
    $("#" + divid).children().each(
    function(i, elemLi) { 
     if(i >= maxMessages) 
     $(this).hide("slow", function() { 
      $(this).remove(); 
     }); 
     } 
); 
} 
+0

@stages: +1 Merci pour la réponse. À partir de maintenant, avec votre modification, est arrivé à l'étape de l'élément disparaissant. Cependant, je ne reçois toujours pas l'effet voulu d'un élément ajouté et l'autre disparaissant. Je suis assez sûr que cela a quelque chose à voir avec mon timing mais je ne suis pas sûr de ce que je devrais utiliser. – Legend

+0

@Legend: Mis à jour ma réponse, ce code devrait fonctionner. – stagas

+0

Génial ... Merci ... Fonctionne comme un charme! :) – Legend

Questions connexes