Bilder vorladen/Neues Menü ausfahren

  • JavaScript

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Agita.

    Bilder vorladen/Neues Menü ausfahren

    Hey, ich hätte zwei fragen. Gibt es die Möglichkeit als erstes auf der Seite eine Progressbar anzuzeigen die sich auffüllt, jedoch erst bei 100% ist wenn von der eigentlichen Seite alles geladen worden ist und das wenn die Progressbar 100% erreicht hat die eigentliche Seite erst angezeigt wird?

    Dann, gibt es die Möglichkeit wenn ich z.B in einer Dropdown-Textzeile etwas auswähle oder einen Link drücke das unten drunter ein aber schon vorhandener Code erst angezeigt wird. D.H sozusagen ist das Item unsichtbar und erst wenn man einen Link drückt soll es angezeigt werden?

    Mfg
    VIEL SPASS :thumbup:

    expandiere mich

    HTML-Quellcode

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <html>
    3. <head>
    4. <title>xaxaxaxaxa</title>
    5. <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
    6. <script type="text/javascript">
    7. // http://ejohn.org/blog/flexible-javascript-events/
    8. function addEvent(obj,type,fn){if(obj.addEventListener){obj.addEventListener(type,fn,false);}else if(obj.attachEvent){obj["e"+type+fn]=fn;obj[type+fn]=function(){obj["e"+type+fn](window.event);};obj.attachEvent( "on"+type,obj[type+fn]);}}
    9. function removeEvent(obj,type,fn){if(obj.removeEventListener){obj.removeEventListener(type,fn,false);}else if(obj.detachEvent){obj.detachEvent("on"+type,obj[type+fn]);obj[type+fn]=null;obj["e"+type+fn]=null;}}
    10. </script>
    11. <style type="text/css">
    12. img
    13. {
    14. width : 400px;
    15. height : 300px;
    16. }
    17. body
    18. {
    19. background : url(http://www.hdwallpapersinhd.net/wp-content/uploads/2013/11/Free-Wallpaper-Pictures.jpg);
    20. }
    21. #body
    22. {
    23. background : url(http://www.hdwallpapersinn.com/wp-content/uploads/2013/05/Free-Wallpaper-Download-For-Laptop-2013-765024.jpg);
    24. }
    25. #loading
    26. {
    27. color : #bbb;
    28. background : #fff;
    29. padding : 10px;
    30. font-size : 20px;
    31. }
    32. #hidden
    33. {
    34. /** benutze NICHT display:none **/
    35. /** denn das blockiert manchmal bestimmte events **/
    36. width : 0px;
    37. height : 0px;
    38. overflow : hidden;
    39. visibility : none;
    40. border : 0px;
    41. position : absolute;
    42. margin : 0px;
    43. }
    44. </style>
    45. </head>
    46. <body>
    47. <div id="body" style="display:none;">
    48. <img src="http://www.hdwallpapers3d.com/wp-content/uploads/2013/05/free-hd-wallpapers-desktop-101.jpg">
    49. <img src="http://www.hdwallpapers3d.com/wp-content/uploads/2013/05/Free-Wallpapers-1.jpg">
    50. <img src="http://www.hdwallpapersview.com/wp-content/uploads/2013/05/free-nature-backgrounds-wallpapers.jpg">
    51. </div>
    52. <div id="loading" style="display:block;"></div>
    53. <div id="hidden"></div>
    54. <script type="text/javascript">
    55. // was ist das hier?
    56. // das ist eine art container...
    57. // alles was innerhalb dessen erstellt wird bleibt drinne
    58. // und nichts kann von aussen drauf zugreifen
    59. // die variablen "OUTSIDE" und "INSIDE" zeigen was gemeint ist
    60. var OUTSIDE = "outside";
    61. (function(){
    62. // auf sachen von aussen kann man antürlich weiterhin zugreifen
    63. OUTSIDE = "inside";
    64. // ganz unten versuch ich auf folgende variable zuzugreifen
    65. var INSIDE = "inside";
    66. // das nur am rande :)
    67. // hatte langeweile xD
    68. // los gehts
    69. var BODY = document.getElementById("body");
    70. var LOADING = document.getElementById("loading");
    71. var HIDDEN = document.getElementById("hidden");
    72. // zuerst das schwerste
    73. // es gibt viele möglichkeiten aufs laden von hintergründen die
    74. // per css definiert wurde zu warten. 99% davon verlangen
    75. // frameworks wie jquery oder co... meine variante bedient sich
    76. // einem simplen, eigentlich schon seit jahrem bekannten, workaround
    77. // und zwar..
    78. // - ALLE elemente des documents durchgehen,
    79. // - deren css style ermitteln
    80. // - und background bilder in einem verstecktem div vorladen
    81. //
    82. // mit dieser var verhindere ich, dass ich das selbe bg bild mehrfach lade
    83. var preloaded = {};
    84. // ermittle ALLE elemente
    85. var docElements = document.getElementsByTagName("*");
    86. // und nun für jedes element...
    87. for (var i=0; i<docElements.length; i++)
    88. {
    89. // ermittle per css definierte styles des elements
    90. var style = window.getComputedStyle(docElements[i]);
    91. // kein bg bild? überspringen
    92. if (typeof style.backgroundImage != "string") continue;
    93. if (style.backgroundImage == "none") continue;
    94. // "url(" am anfang und ")" am ende entfernen
    95. var bgImg = style.backgroundImage.substr(5, style.backgroundImage.length - 'url("")'.length);
    96. // überspringe wenn bereits geladen
    97. if (typeof preloaded[bgImg] != "undefined") continue;
    98. // speichere als geladen
    99. preloaded[bgImg] = true;
    100. // erstelle neues img element
    101. var img = document.createElement("img");
    102. img.src = bgImg;
    103. // füge img element im versteckten div hinzu
    104. HIDDEN.appendChild(img);
    105. }
    106. // das gröbste ist geschafft
    107. // um css backgrounds müssen wir uns nicht mehr kümmern,
    108. // das geschieht automatisch
    109. // dies ist die anzahl von bildern die noch darauf warten geladen zu werden
    110. var queue = 0;
    111. // diese funktion wird aufgerufen wenn ein bild fertig ist
    112. function onload(imgSrc)
    113. {
    114. // damit man auch sieht dass etwas passiert...
    115. LOADING.innerHTML += imgSrc+"<br>";
    116. // verringere
    117. queue--;
    118. // wenn alles geladen
    119. if (queue == 0)
    120. {
    121. alert("alles geladen");
    122. // dann deaktiviere das preload-div
    123. LOADING.style.display = "none";
    124. // und aktiviere das eigentliche div
    125. BODY.style.display = "block";
    126. // zusätzlich KANN man noch folgendes machen,
    127. // das löscht das preload div aus dem document
    128. HIDDEN.parentNode.removeChild(HIDDEN);
    129. }
    130. }
    131. //
    132. // nun müssen wir aber noch alle images durchgehen und sie mit dem event kombinieren
    133. //
    134. // alle img elemente
    135. var imgs = document.getElementsByTagName("img");
    136. // für jedes davon...
    137. for (var i=0; i<imgs.length; i++)
    138. {
    139. // erhöhe warteschlange
    140. queue++;
    141. // und füge event hinzu
    142. eval(' addEvent(imgs[i], "load", function(){onload("'+imgs[i].getAttribute("src")+'");}); ');
    143. // wozu eval() ?? wegen dem src parameter das ich übergeben will, nur 'n kleiner debug
    144. }
    145. })();
    146. // und hier versuchen wir nun etwas innerhalb des containers von aussen aufzurufen
    147. // produziert einen reference error
    148. alert(INSIDE);
    149. </script>
    150. </body>
    151. </html>


    Vorschau