Timeout jQuery-Effekte


101

Ich versuche, ein Element einblenden zu lassen, dann in 5000 ms wieder auszublenden. Ich weiß, dass ich so etwas tun kann:

setTimeout(function () { $(".notice").fadeOut(); }, 5000);

Aber das wird nur das Ausblenden kontrollieren. Würde ich das oben genannte beim Rückruf hinzufügen?

Antworten:


197

Update: Ab jQuery 1.4 können Sie die .delay( n )Methode verwenden. http://api.jquery.com/delay/

$('.notice').fadeIn().delay(2000).fadeOut('slow'); 

Hinweis : $.show()und sind $.hide()standardmäßig nicht in der Warteschlange. Wenn Sie sie also verwenden möchten $.delay(), müssen Sie sie folgendermaßen konfigurieren:

$('.notice')
    .show({duration: 0, queue: true})
    .delay(2000)
    .hide({duration: 0, queue: true});

Sie könnten möglicherweise die Warteschlangensyntax verwenden, dies könnte funktionieren:

jQuery(function($){ 

var e = $('.notice'); 
e.fadeIn(); 
e.queue(function(){ 
  setTimeout(function(){ 
    e.dequeue(); 
  }, 2000 ); 
}); 
e.fadeOut('fast'); 

}); 

oder Sie könnten wirklich genial sein und eine jQuery-Funktion erstellen, um dies zu tun.

(function($){ 

  jQuery.fn.idle = function(time)
  { 
      var o = $(this); 
      o.queue(function()
      { 
         setTimeout(function()
         { 
            o.dequeue(); 
         }, time);
      });
  };
})(jQuery);

was Ihnen (theoretisch hier an der Erinnerung arbeiten) erlauben würde, dies zu tun:

$('.notice').fadeIn().idle(2000).fadeOut('slow'); 

1
Ich frage mich, warum Sie die Warteschlange verwenden, wenn eine einfache Verwendung von setTimeout ebenfalls funktioniert.
— SolutionYogi

33
Denn wenn Sie die Warteschlange verwenden, ist es einfach, dem Code neue Ereignisse hinzuzufügen und ihn wiederzuverwenden, und die Wiederverwendung von Code ist ein GoodThing ™
— Kent Fredric

2
Beachten Sie, dass delay (), wie auch in der jQuery-API-Dokumentation angegeben, eigentlich nur für Dinge verwendet werden sollte, die mit der Effektwarteschlange zusammenhängen. Wenn Sie eine Zeitüberschreitung für etwas anderes benötigen, ist setTimeout () immer noch der richtige Weg.
— scy

Wow, danke für den Link @bottlenecked. Ich denke, der Grund dafür, dass mein Beispiel der neuen Funktion von jQuery so ähnlich ist, ist, dass diese Antwort auf bugs.jquery.com/ticket/4102 = P
— Kent Fredric

23

Ich habe es gerade unten herausgefunden:

$(".notice")
   .fadeIn( function() 
   {
      setTimeout( function()
      {
         $(".notice").fadeOut("fast");
      }, 2000);
   });

Ich werde den Beitrag für andere Benutzer behalten!


14

Toller Hack von @strager. Implementieren Sie es wie folgt in jQuery:

jQuery.fn.wait = function (MiliSeconds) {
    $(this).animate({ opacity: '+=0' }, MiliSeconds);
    return this;
}

Und dann benutze es als:

$('.notice').fadeIn().wait(2000).fadeOut('slow');

11

Sie können so etwas tun:

$('.notice')
    .fadeIn()
    .animate({opacity: '+=0'}, 2000)   // Does nothing for 2000ms
    .fadeOut('fast');

Leider können Sie nicht einfach .animate ({}, 2000) ausführen - ich denke, dies ist ein Fehler und werde ihn melden.



5

Um es so verwenden zu können, müssen Sie zurückkehren this. Ohne die Rückgabe erhält fadeOut ('slow') kein Objekt, mit dem diese Operation ausgeführt werden kann.

Dh:

  $.fn.idle = function(time)
  {
      var o = $(this);
      o.queue(function()
      {
         setTimeout(function()
         {
            o.dequeue();
         }, time);
      });
      return this;              //****
  }

Dann mach das:

$('.notice').fadeIn().idle(2000).fadeOut('slow');

1

Dies kann mit nur wenigen Zeilen jQuery erfolgen:

$(function(){
    // make sure img is hidden - fade in
    $('img').hide().fadeIn(2000);

    // after 5 second timeout - fade out
    setTimeout(function(){$('img').fadeOut(2000);}, 5000);
});​

Ein funktionierendes Beispiel finden Sie in der Geige unten ...

http://jsfiddle.net/eNxuJ/78/

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.