php.de

Zurück   php.de > php.de Intern > Beitragsarchiv > Adventskalender 2008

 
 
LinkBack Themen-Optionen
Alt 19.12.2008, 00:18  
Adventskalenderöffner
 
Benutzerbild von Nikolaus 2.0
 
Registriert seit: 27.11.2008
Beiträge: 72
PHP-Kenntnisse:
Fortgeschritten
Nikolaus 2.0 ist einfach richtig nettNikolaus 2.0 ist einfach richtig nettNikolaus 2.0 ist einfach richtig nettNikolaus 2.0 ist einfach richtig nettNikolaus 2.0 ist einfach richtig nett
Standard 10011: Gut geladen ist halb gewonnen oder Anzeige gegen Unbekannt

10011:
Es existiert mittlerweile Vielzahl an JavaScript-Anwendungen im Web. Eine sehr bekannte ist z.B. die Server-Kundenverwaltungssoftware Plesk, aber auch Epesi, das wir schon am 1000. bei den Projektmanagement-Tools vorgestellt haben.
Alle haben dabei eines gemeinsam, nämlich eine Ladeanzeige. Diese sperrt die Seite solange, (bei Plesk) oder blendet zumindest einen Layer in der Mitte der Seite ein (Epesi) bis die Seite vollkommen geladen wurde. Ein vollkommen unnötiges Feature, das die Arbeit nur erschwert und den Benutzer frustriert. Wenigstens bei Plesk kann man es abschalten.
Doch nun zur Problematik: viele Jung-JavaScriptler wollen diese Funktion nachbauen und sie tun es meist genauso falsch, wie die Entwickler der oben genannten Tools es gemacht haben.
Aber weshalb nun dieser Artikel? Er soll nicht die Vor- oder Nachteile erörtern und auch nicht davon abbringen, dieses „Feature“ zu implementieren, er soll einfach nur zeigen, wie man es machen sollte, wenn man es machte.

Der Fehler:
Die einfachste Lösung ist diese:
Code:
// Layer einblenden

window.onload = function() {
    // Layer ausblenden
};
Das ist aber definitiv nicht der richtige Weg!
Warum?
Das load-Event wartet, bis wirklich alle Elemente der Seite geladen wurden, das schließt auch Bilder und Fremdinhalte ein. Wenn jetzt also besonders große Grafiken auf der Seite vorhanden sind oder Inhalte von einem fremden Server eingebunden werden, der derzeit etwas schwach auf der Brust ist, wartet der Benutzer sich tot bis das Timeout zuschlägt oder die Grafik doch noch vollständig geladen wurde.
Dieser Weg ist also definitiv der Falsche!

Die Lösung:
Es gibt ein weiteres Event, das sich DOMContentLoaded nennt. Dieses ist aus vielen JavaScript-Frameworks gut bekannt, wie z.B. jQuery:
Code:
$(document).ready(function() {
    // …
});
Es ist also ganz einfach, das load-Event durch das ready-Event zu ersetzen.
Doch was ist, wenn man kein JavaScript-Framework einsetzt?
DOMContentLoaded existiert in dieser Form nur in Mozilla-Browsern, doch soll der Layer auch in anderen Browsern angezeigt werden.
Code:
// Layer einblenden

window.addEventListener('DOMContentLoaded', function() {
    // Layer ausblenden
}, null);
würde also z.B. nicht im IE funktionieren.
Möglich ist eine Crossbrowser-Kompatibilität aber dennoch, immerhin schaffen die JavaScript-Frameworks das auch. Um herauszufinden wie, kann man einen Blick in den Quellcodes des Frameworks werfen, allerings ist der Code meist weitestgehend unkommentiert.
Es hat sich aber mal jemand die Mühe gemacht, und ein Tutorial zu diesem Thema zu schreiben, welches hier zu finden ist: Are you ready for this

Mit diesem Code gerüstet, kann man sein Vorhaben nun ganz einfach verwirklichen:
Code:
// Layer einblenden

registerOnLoad(function() {
    // Layer ausblenden
});
Links zum Thema:
Nikolaus 2.0 ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 19.12.2008, 00:26  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 34.256
PHP-Kenntnisse:
Fortgeschritten
nikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz seinnikosch kann auf vieles stolz sein
Standard

Schöne Quellen. Aber puh, dafür braucht man die ein oder andere ruhige Minute...

Wichtig ist auch zu erwähnen, dass die guten .ready Implementierung additiv sind, also alte (vorher gesetzte) document.ready Aktionen nicht überschreiben, sondern ergänzen.

Wie das für onLoad geht (zum Vergleich), ist Teil dieses Tutorials (JS: Einführung - Javascript im Schichtenmodell).
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline  
Alt 19.12.2008, 08:13  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Schöner Artikel, aber als wirklich sinnvoll sehe ich diese Ladegrafiken in der Form nicht. Die benutze ich nur wenn ich AJAX-Aktionen ausführe und warte bis ich die Antwort erhalte, allein um den Usern zu zeigen das da noch etwas passiert... Für die die es noch nicht kennen: Ajaxload - Ajax loading gif generator
cycap ist offline  
Alt 19.12.2008, 10:51  
Erfahrener Benutzer
 
Benutzerbild von tomtaz
 
Registriert seit: 17.06.2008
Beiträge: 1.762
PHP-Kenntnisse:
Fortgeschritten
tomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig nett
tomtaz eine Nachricht über ICQ schicken tomtaz eine Nachricht über Skype™ schicken
Standard

Jap schließe mich hier Cycap an. Wenn ein Ajax Request ausgeführt wird kann ruhig eine Grafik kommen, aber nicht wenn man irgendne Seite aufruft. Das stört nur. Ganz besonders bei der Serverkonfiguration mit Plesk...
__________________
Mfg Tomtaz
"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..."
tomtaz ist offline  
Alt 19.12.2008, 10:53  
Moderator
 
Benutzerbild von cycap
 
Registriert seit: 13.02.2008
Beiträge: 6.816
PHP-Kenntnisse:
Fortgeschritten
cycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nettcycap ist einfach richtig nett
Standard

Ausserdem hab ich nen Browser der mir sagt das er noch am Laden ist, sogar mir Ladegrafik
cycap ist offline  
Alt 19.12.2008, 10:58  
Erfahrener Benutzer
 
Benutzerbild von tomtaz
 
Registriert seit: 17.06.2008
Beiträge: 1.762
PHP-Kenntnisse:
Fortgeschritten
tomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig netttomtaz ist einfach richtig nett
tomtaz eine Nachricht über ICQ schicken tomtaz eine Nachricht über Skype™ schicken
Standard

Zitat:
Zitat von cycap Beitrag anzeigen
Ausserdem hab ich nen Browser der mir sagt das er noch am Laden ist, sogar mir Ladegrafik
Jop, das was mich am allermeisten Stört ist die Tatsache, dass wenn dann so ein Bild kommt von wegen Seite noch nicht fertiggeladen, und dann klickt man zurück... Das Bilchen bleibt... Gerade wieder bei Plesk aufgefallen
__________________
Mfg Tomtaz
"Es soll jetzt diese Erfindung geben.... Kugel oder so heißt die. Ist so eine Art Suchmaschine..."
tomtaz ist offline  
Alt 19.12.2008, 11:49  
Supermoderator HD
 
Benutzerbild von Manko10
 
Registriert seit: 16.03.2008
Beiträge: 8.425
PHP-Kenntnisse:
Fortgeschritten
Manko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende ZukunftManko10 hat eine strahlende Zukunft
Standard

Zitat:
Das Bilchen bleibt... Gerade wieder bei Plesk aufgefallen
Dann schalte es doch aus, so mache ich das auch immer.
Ich finde Ladegraphiken auch nervig, aber wenn schon, dann auch richtig wie hier beschrieben.
__________________
Refining Linux Advent Calendar series “24 Outstanding ZSH Gems
Manko10 ist offline  
 


Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Bitte warten anzeige während seite geladen wird HTML, Usability und Barrierefreiheit 2 19.10.2004 13:03

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
jquery ladeanzeige, ladeanzeige jquery, jquery ajax wartegrafik, jquery ajax ladegrafik, http://www.php.de/adventskalender-2008/49931-10011-gut-geladen-ist-halb-gewonnen-oder-anzeige-gegen-unbekannt.html, $(document).ready(function(){}, anzeige gegen unbekannt, query ladeanzeige, jquery ladeanzeige während bild lädt, html warten, bis eine grafik geladen wurde, jquery warten bis element geladen ist, jquery ajax complete, ladelayer jquery, \bitte warten\ layer jquery, jquery warten bis bilder geladen, ladeanzeige bei neuer seite jquery, jquery .get ladeanzeige, ajax layer während seite lädt, plesk ladeanzeige nachbauen, jquery lade anzeige

Alle Zeitangaben in WEZ +1. Es ist jetzt 22:53 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum