Ich möchte Webseiten so gestalten, dass sie ineinander gleiten. Also habe ich $ ('a') gemacht. Click (); Funktion, die prüft, ob die Verbindung lokal ist und ob sie eine Verknüpfung href erhält und sie in den Hauptteil lädt.
%Vor% Sieht gut aus, aber auf meiner Seite sind auch viele js Plugins enthalten. Die Ausführung von ihnen dauert eine Weile, und .load
action zeigt zuerst "unverändert durch den Inhalt von js" und dann js. Es verursacht ein schlechtes Flickr des Inhalts.
Ist es möglich, neuen Inhalt mit der ganzen Ausführung von JS zu cachen, den alten Körper nicht zu ändern, bis er fertig ist, und wenn alle DOM und JS auf NEW Inhalt gemacht sind, alten Inhalt ausschieben und neuen einfügen?
edit: Ich denke, es geht nicht darum, die js-Ausführung zu erkennen, sondern zu prüfen, ob alle zusätzlichen Dateien geladen sind - DOM-Änderungen sollten zur gleichen Zeit ausgelöst werden, zu der $ (window) .load der neuen Datei wäre.
[Bearbeiten] ----------------------------------------- -----------------------------
Meine Lösung dafür war CSS-Code (css wird immer geladen, bevor Dom erstellt wird), die Browser-Opazität 0 hat.
%Vor%Und es verhindert in der Regel, aber nicht immer, das schlechte Flickr des Inhalts. Jetzt ist es möglich, irgendwie zu erkennen, dass Inhalt von jQuery ajax geladen wird und einige Show-Timeouts und so weiter anwenden. Aber in der Tat ist die Frage noch offen.
Um nun ein etwas einfacheres Beispiel für diese Frage zu machen:
Wie beginne ich, DOM nach $ ('body') zu ändern. load ('something.php') 3000ms nach dem Klicken auf den Link, der fire .load ('something.php') funktioniert? (Das Laden sollte sofort nach dem Klicken gestartet werden, aber das Ändern des DOM muss später eingeleitet werden)
Vielleicht sollten Sie Versprechungen verwenden und so etwas ausprobieren:
%Vor%Die Funktion .load stellt einen zweiten Parameter zur Verfügung, eine Funktion, die aufgerufen wird, wenn die Operation abgeschlossen ist. Sie können damit im Wesentlichen alle Ihre Operationen synchronisieren, die auf den Abschluss des Ajax-Aufrufs angewiesen sind oder warten müssen. Etwas wie das:
%Vor%Bearbeiten: Wie adeneo in den Kommentaren darauf hingewiesen hat, sehen Sie sich die Dokumentation an.
Eine Sache, die helfen könnte, ist Ihren HTML-Code zu setzen innerhalb eines Skript-Tags mit einem benutzerdefinierten Typ (oder um Ihr HTML in das Skript-Tag zu laden)
so:
%Vor%Der HTML-Code im Inneren wird vom Dom nicht verstanden, bis Sie ihn an die Seite anfügen
%Vor%Ajos!
Verwenden Sie nicht .load (). Diese Methode macht genau das, was du vermeiden willst.
Versuchen Sie Folgendes:
Natürlich, wenn Ihre Skripte auf etwas wie $ (document) .ready () angewiesen sind, wird dies nicht funktionieren, da dies sofort ausgeführt wird. Bilder haben das gleiche Problem. Sie werden asynchron geladen, so dass Sie nicht wissen, wann alle geladen sind, außer wenn Sie einen Handler an das onload-Ereignis jedes Bildes anhängen, was keine gute Idee ist.
Tags und Links jquery