7 Stimmen

Wie kann ich ein Jquery-Dialogfeld anzeigen, bevor die gesamte Seite geladen ist?

Auf meiner Website kann eine Reihe von Vorgängen sehr lange dauern.

Wenn ich weiß, dass das Laden einer Seite eine Weile dauern wird, möchte ich eine Fortschrittsanzeige anzeigen, während die Seite geladen wird.

Im Idealfall würde ich etwas sagen, das in etwa so lautet:

$("#dialog").show("progress.php");

und dieses Overlay über der geladenen Seite platzieren (und nach Abschluss des Vorgangs wieder verschwinden).

Die Codierung des Fortschrittsbalkens und die Anzeige des Fortschritts ist kein Problem, das Problem besteht darin, eine Fortschrittsanzeige zu erhalten, die erscheint, WÄHREND die Seite geladen wird. Ich habe versucht, JQuery-Dialoge für diese zu verwenden, aber sie erscheinen nur, nachdem die Seite bereits geladen ist.

Dies muss ein häufiges Problem sein, aber ich kenne mich nicht gut genug mit JavaScript aus, um zu wissen, wie man das am besten macht.

Hier ein einfaches Beispiel, um das Problem zu veranschaulichen. Der folgende Code zeigt das Dialogfeld nicht an, bevor die 20-Sekunden-Pause abgelaufen ist. Ich habe es in Chrome und Firefox versucht. Tatsächlich sehe ich nicht einmal den Text "Bitte warten...".

Hier ist der Code, den ich verwende:

<html>
  <head>
      <link type="text/css" href="http://jqueryui.com/latest/themes/base/ui.all.css" rel="stylesheet" />
    <script type="text/javascript" src="http://jqueryui.com/latest/jquery-1.3.2.js"></script>
    <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.core.js"></script>
    <script type="text/javascript" src="http://jqueryui.com/latest/ui/ui.dialog.js"></script>

  </head>
  <body>
    <div id="please-wait">My Dialog</div>
    <script type="text/javascript">
      $("#please-wait").dialog();
    </script>
    <?php
    flush();
    echo "Waiting...";
    sleep(20);
    ?>
  </body>
</html>

10voto

Seb Punkte 24444

Sie müssen dieses Codestück unmittelbar nach dem <body>-Tag ausführen, etwa so:

<html>
  <head>
  </head>
  <body>
    <div id="please-wait"></div>
    <script type="text/javascript">
      // Use your favourite dialog plugin here.
      $("#please-wait").dialog();
    </script>
    ....
  </body>
</html>

Beachten Sie, dass ich das traditionelle $(function (){}) weggelassen habe, weil es geladen werden muss, sobald die Seite angezeigt wird, und nicht erst, wenn das gesamte DOM geladen ist.

Ich habe das schon einmal gemacht und es funktioniert hervorragend, auch wenn die Seite noch nicht fertig geladen ist.

EDITAR: müssen Sie sicherstellen, dass das von Ihnen verwendete jQuery-Dialog-Plugin geladen wird vor Ihr gesamtes DOM lädt. In der Regel ist dies nicht der Fall, Sie es nicht funktionieren wird. In diesem Fall müssen Sie eine einfache JavaScript-Lösung verwenden, wie z. B. Leuchtkasten 1 o Leuchtkasten 2 .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X