2016-10-30 1 views
-1

Ich habe Code (nicht notwendig für die Frage), die nach $ (Dokument) .ready() oder ausgeführt werden muss, wenn das Fenster für sagen wir 5 Sekunden geladen wird.

Ich habe versucht, es herauszufinden, aber ich konnte nichts im Web finden. Hoffe jemand hier kann mir helfen!

(Ich weiß, wie es in 2 Aussagen trennen zu tun, aber ich brauche es in einer OR-Anweisung zu setzen.)

Edit: es für die Menschen deutlicher zu machen. Entweder warte bis das Dokument fertig ist aka dom ist aufgebaut ODER wenn nach 5 Sekunden das Dokument immer noch nicht bereit ist, aber das Fenster geladen ist, führe einfach die Funktion aus.

+0

Es ist nicht klar, was Sie fragen. Warum ist * * entweder auf DOM oder nach fünf Sekunden bereit? –

+0

'setTimeout' ist keine Option? – VDWWD

+0

* "Wenn das Fenster geladen ist" * - Das Fenster? Meinst du das Dokument? Fünf Sekunden, nachdem das Dokument geladen wurde, ist * nach * das Dokument bereit Ereignis, so dass Ihre Anforderung nicht sinnvoll ist. Oder meinst du fünf Sekunden nach dem ersten Laden der Seite? – nnnnnn

Antwort

1

Verwenden Sie setTimeout, um den Vorgang zu planen, und setzen Sie dann clearTimeout in $(document).ready(), um es abzubrechen, wenn das Dokument früher fertig wird.

Und verwenden Sie eine Variable, um festzustellen, ob die Funktion bereits vom Timer ausgeführt wurde, damit Sie dies nicht erneut in der Bereit-Funktion tun.

var functionDone = false; 
var timeout = setTimeout(function() { 
    someFunction(); 
    functionDone = true; 
}, 5000); 
$(document).ready(function() { 
    if (!functionDone) { 
     clearTimeout(timeout); 
     someFunction(); 
    } 
}); 
+0

Das hat es für mich getan, danke :) – Pandafoxxxx

0

Für eine resuable Lösung können Sie einen Timeout-Wrapper wie diese erzeugen erstellen:

// return a new function to pass to document.ready 
// that has a timeout wrapper on it 
function timeoutFn(fn, t) { 
    var fired = false; 
    var timer; 
    function run() { 
     clearTimeout(timer); 
     timer = null; 
     if (!fired) { 
      fired = true; 
      fn(); 
     } 
    } 
    timer = setTimeout(run, t); 
    return run; 
} 

Und es dann wie folgt verwenden:

$(document).ready(timeoutFn(function() { 
    // put code here for function that will be called 
    // at the earlier occurrence of 5 seconds or document.ready 
}, 5000)); 

Oder Sie könnte dies ein jQuery-Plug-in machen:

jQuery.fn.readyTimeout = function(fn, t) { 
    return $(document).ready(timeoutFn(fn, t)); 
} 

Und verwenden Sie es wie folgt aus:

$(document).readyTimeout(function() { 
    // put code here for function that will be called 
    // at the earlier occurrence of 5 seconds or document.ready 
}, 5000); 
Verwandte Themen