Bitte warten Sie modale Overlay vor ohne SetTimeout mit einer hohen Arbeitsbelastung für eine Funktion wartet ()?

StackOverflow https://stackoverflow.com/questions/1595082

Frage

Dies ist ein vereinfachtes Beispiel, um sicherzustellen, dass es keine asynchrone Fading / Animation beteiligten Funktionen.

Ich mag, dass der Hintergrund ist rot, wenn die Funktion mit den hohen Arbeitsbelastung Arbeiten und Wendungen zu schwarz, wenn es fertig ist. Was tatsächlich passiert ist, dass die meisten Zeiten der Hintergrund direkt zu schwarz werden wird, nachdem die Funktion bereit ist. Yo nicht einen roten Hintergrund sehen, auch wenn Sie für ‚erledigt‘ aufmerksam gemacht werden warten.

Gibt es eine bessere Lösung, dann ein paar Millisekunden mit setTimeout gefundenen Fresse, so dass der Hintergrund zu rot wechseln passiert. So rufen Arbeit () direkt erzeugt das Problem.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Test</title>
<script type='text/javascript'>
function work()
{
    var i, a;
    a = [];
    for(i = 0; i < 250000; i++)
    {
        a.push(Math.random());
    }
    a.sort();
    document.getElementsByTagName('body')[0].style.background = '#000000';
    alert('done');
    return true;
}

window.onload = function() {
    document.getElementsByTagName('body')[0].style.background = '#ff0000';
    //work();
    setTimeout(work, 100);

};
</script>
</head>
<body>
<h1>Test</h1>
</body>
</html>
War es hilfreich?

Lösung

Die „Modal Popup“ ist es das Skript zu speichern aus vollständig (für immer) Sperren der Browser und macht der Benutzer wirklich aufregen . Diese Wächter ist von JS-Code nicht nachweisbar und hält die JS Ausführung, die ein folgt synchron Modell. Es ist Ihnen zu speichern, Code schreiben, die nicht blockiert ! Es ist eigentlich ziemlich einfach zu installieren die meisten Berechnungen fortsetzbar und cancleable durch die Verwendung von Thunks / Verschlüssen oder Warteschlangen zu sein.

Wie auch immer ... in meiner Erfahrung eine „Verzögerung“ von 1ms ist genug in FF3.5 (Win) und IE6-8 die CSS zu aktualisieren (die tatsächliche Verzögerung wird wahrscheinlich mehr als 1 ms). Dies zwingt die „Queueing“ des Ereignisses Post zurück innerhalb des synchronen Modell , die zumindest in den Fällen, über die CSS-Stile vor der Ausführung von JS angewendet werden kann fortgesetzt. Ich denke, Prototype.js einen Wert von 0 ms verwendet für seine Funktion „Verzögerung“, aber ich bin nicht so mutig.

Auch 'document.body': -)

(Ich bin ziemlich sicher, dass es keine „bessere“ Art und Weise, obwohl dieser ganze Ansatz riecht wie ein Open-Air-Fischmarkt.)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top