Funktion nach Verzögerung ausführen

77

Ich habe die folgende globale jQuery-Funktion gespeichert, aber beim Laden der Seite möchte ich sie nach einer Verzögerung von 1000 ausführen. Stimmt etwas mit meiner Syntax nicht? Ich weiß, dass die Verzögerung immer vor der Funktion liegt. Es reagiert nicht.

Globale Funktion:

function showpanel() {     
       $(".navigation").hide();
       $(".page").children(".panel").fadeIn(1000);
    ;}

Funktion ausführen:

parallax.about.onload=function(){
    $('#about').delay(3000).showpanel();
};
Joe Isaacson
quelle
Dies ist, was Sie suchen Mann :) hoffe, das hilft, stackoverflow.com/questions/5322344/…
Tats_innit
Das erste eindeutige Problem besteht darin, dass Sie versuchen, showpanel als Methode eines anderen Objekts aufzurufen (in diesem Fall das vom Aufruf delay () zurückgegebene jQuery-Objekt). Sie haben showpanel jedoch als einfache, direkt zugängliche Funktion und nicht als Methode eines Objekts deklariert. JavaScript funktioniert so nicht.
BobS

Antworten:

146
$(document).ready(function() {

  // place this within dom ready function
  function showpanel() {     
    $(".navigation").hide();
    $(".page").children(".panel").fadeIn(1000);
 }

 // use setTimeout() to execute
 setTimeout(showpanel, 1000)

});

Mehr dazu hier

thecodeparadox
quelle
47

Ich habe gesucht und festgestellt, dass die Lösung unter der folgenden URL besser ist .

http://www.tutorialrepublic.com/faq/call-a-function-after-some-time-in-jquery.php

Es lohnt sich zu versuchen.

Es fügt Ihre angegebene Funktion der Warteschlange der Funktionen hinzu, die für das übereinstimmende Element ausgeführt werden sollen, bei dem es sich derzeit um dieses handelt .

 $(this).delay(1000).queue(function() {

     // your Code | Function here
     
     $(this).dequeue();
  
  });

und führen Sie dann die nächste Funktion in der Warteschlange für die übereinstimmenden Elemente aus, bei denen es sich derzeit wieder um diese handelt .

- EDIT [MÖGLICHE ERLÄUTERUNG FÜR DEN DEQUEUE- BEFEHL]

Schauen Sie sich den Befehl an

Wir befehlen der jQuery-Engine, eine Funktion in die interne Warteschlange aufzunehmen, und dann befehlen wir ihr nach einer bestimmten Zeit, diese Funktion aufzurufen, ABER bisher haben wir ihr nie gesagt, sie aus der Engine zu entfernen. Recht?! Und nachdem alles erledigt ist, wird es manuell aus der jQuery-Engine entfernt. Ich hoffe die Erklärung konnte helfen.

ebrahim.mr
quelle
Können Sie die Lösung zusammenfassen und erklären, wie sie funktioniert? Nur eine Verknüpfung zu einer Lösung ist nicht ideal, da diese Verknüpfung möglicherweise irgendwann in der Zukunft nicht mehr funktioniert ...
Devlin Carnate
@devlincarnate Ich habe den Beitrag aktualisiert. Lesen Sie ihn und sehen Sie, dass er einfach zu verstehen ist oder nicht. Ich hoffe, er ist nützlich.
ebrahim.mr
4
Dies erklärt nicht, was die Warteschlange tut oder warum eine Warteschlange erforderlich ist. Welchen Zweck hat der Server in der Warteschlange? Ich würde nicht erwarten, dass die Funktion mehr als einmal ausgeführt wird. Warum also aus der Warteschlange entfernen?
Triynko
$('#main > ul').delay(100).queue(function () { $(this).attr('data-uk-grid', 'masonry: true; parallax: 150;').dequeue() }); $('#main > ul').delay(1).queue(function () { $(this).removeClass('uk-grid uk-flex-top uk-flex-wrap-top').dequeue() });
Olivier
1
@Niklas Ich habe den Beitrag aktualisiert. Bitte schauen Sie es sich an.
ebrahim.mr
31

Sie können in jQuery eine Timeout-Funktion hinzufügen (Warnung nach 3 Sekunden anzeigen):

$(document).ready(function($) {
    setTimeout(function() {
     alert("Hello");
    }, 3000);
});
Prinz Patel
quelle
1

Diese Antwort ist nur hilfreich, um zu verstehen, wie Sie mit der JQuery- Funktion Verzögerungen verursachendelay können.

Stellen Sie sich vor, Sie haben eine Warnung und möchten den Warnungstext festlegen, dann die Warnung anzeigen und nach einigen Sekunden ausblenden.

Hier ist die einfache Lösung:

$(".alert-element").html("I'm the alert text").fadeIn(500).delay(5000).fadeOut(1000);

Es ist ganz einfach:

  1. .html() wird den Text von ändern .alert-element
  2. .fadeIn(500) wird nach 500 Millisekunden eingeblendet
  3. Die JQuery- delay(5000)Funktion verzögert 5000 Millisekunden, bevor die nächste Funktion aufgerufen wird
  4. .fadeOut(1000) am Ende der Anweisung wird die ausgeblendet .alert-element
Mohammad Kermani
quelle