Preloader für PDF Dokumente erstellen
elvaube
- javascript
0 Struppi0 Jens Müller
Hallo zusammen, aus dem Internet habe ich mir folgendes Script kopiert:
<script language=JavaScript1.2>
<!-- begin hiding
startingColor = new Array()
endingColor = new Array()
var yourImages = new Array("GRAFIK.GIF","2. Datei","3. Datei usw.")
var locationAfterPreload = "DATEINAME DER DATEI, DIE NACH DEM PRELOADER ERSCHEINEN SOLL"
var preloadbarWidth = 250
var preloadbarHeight = 10
var backgroundOfGradient = "#FFFFFF"
startingColor[0] = "F"
startingColor[1] = "F"
startingColor[2] = "F"
endingColor[0] = "0"
endingColor[1] = "0"
endingColor[2] = "0"
var gap = 7
if (!document.all) location.replace(locationAfterPreload)
var a = 10, b = 11, c = 12, d = 13, e = 14, f=15, i, j, ones = new Array(), sixteens = new Array(), diff = new Array();
var convert = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"), imgLen = yourImages.length;
var loaded = new Array(), preImages = new Array(), currCount = 0, pending = 0, h = 0, hilite = new Array(), cover = new Array();
var num = Math.floor(preloadbarWidth/gap);
for (i = 0; i < 3; i++) {
startingColor[i] = startingColor[i].toLowerCase();
endingColor[i] = endingColor[i].toLowerCase();
startingColor[i] = eval(startingColor[i]);
endingColor[i] = eval(endingColor[i]);
diff[i] = (endingColor[i]-startingColor[i])/num;
ones[i] = Math.floor(diff[i]);
sixteens[i] = Math.round((diff[i] - ones[i])*15);
}
endingColor[0] = 0;
endingColor[1] = 0;
endingColor[2] = 0;
i = 0, j = 0;
while (i <= num) {
hilite[i] = "#";
while (j < 3) {
hilite[i] += convert[startingColor[j]];
hilite[i] += convert[endingColor[j]];
startingColor[j] += ones[j];
endingColor[j] += sixteens[j];
if (endingColor[j] > 15) {
endingColor[j] -= 15;
startingColor[j]++;
}
j++;
}
j = 0;
i++;
}
function loadImages() {
for (i = 0; i < imgLen; i++) {
preImages[i] = new Image();
preImages[i].src = yourImages[i];
loaded[i] = 0;
cover[i] = Math.floor(num/imgLen)*(i+1)
}
cover[cover.length-1] += num%imgLen
checkLoad();
}
function checkLoad() {
if (pending) { changeto(); return }
if (currCount == imgLen) { location.replace(locationAfterPreload); return }
for (i = 0; i < imgLen; i++) {
if (!loaded[i] && preImages[i].complete) {
loaded[i] = 1; pending++; currCount++;
checkLoad();
return;
}
}
setTimeout("checkLoad()",10);
}
function changeto() {
if (h+1 > cover[currCount-1]) {
var percent = Math.round(100/imgLen)*currCount;
if (percent > 100) while (percent != 100) percent--;
if (currCount == imgLen && percent < 100) percent = 100;
defaultStatus = currCount + " von " + imgLen + " Dokumenten geladen (" + percent + "%).";
pending--;
checkLoad();
return;
}
eval("document.all.cell" + (h+1) + ".style.backgroundColor = hilite[h]");;
h++;
setTimeout("changeto()",1);
}
defaultStatus = "0 von " + imgLen + " Dokumenten geladen (0%)."
// end hiding -->
</script>
<center>
<b>Dokument wird geladen...</b><p>
<script language=JavaScript1.2>
<!-- beging hiding
document.write('<table border="0" cellpadding="0" cellspacing="0" width="' + preloadbarWidth + '"><tr height="' + preloadbarHeight + '" bgcolor="' + backgroundOfGradient + '">');
for (i = 0; i < num; i++) {
document.write('<td width="' + gap + '" id="cell' + (i+1) + '"></td>');
}
document.write('</tr></table>');
document.write('<p><small><a class="normal" href="javascript:location.replace(locationAfterPreload)">Ladevorgang Überspringen</a></small></p></font>')
loadImages();
// end hiding -->
</script>
</center>
Das Problem ist nun das Array; gebe ich hier statt Bildern PDF Dokumente an, so wird das Script nicht mehr ausgeführt. Als JS Newbie kann ich mir da selber nicht weiterhelfen und richte meine Frage an euch Profis :)
cu und Danke für jeden Tipp,
elvaube
Das Problem ist nun das Array; gebe ich hier statt Bildern PDF Dokumente an, so wird das Script nicht mehr ausgeführt. Als JS Newbie kann ich mir da selber nicht weiterhelfen und richte meine Frage an euch Profis :)
Kannst du mir sagen, was ein preloader bringen soll?
Wem tust du damit einen gefallen?
Denen die JS ausgeschaltet haben und nichts mehrt passiert?
Denen mit einem Modem, die sich wundern das nichts mehr passiert?
Denen die aus versehn auf deine Seite kamen und sich dann ungefragt erstmal tonnenweise Grafiken runterladen müssen?
(Es gibt User, die ihren Internetzugang nach Menge abrechnen, d.h. du zwingst denen Kosten auf, ohne das es sie eine Wahl haben)
Du sagst jetzt bestimmt, dass der Seiten aufbau schneller geht (was nicht stimmt, er egth langsamer, das du zweimal auf die Grafiken zugreigen musst (einmal von der Fetsplatte) und das es blöd aussieht wenn's so rumzappelt (was es nur im IE tut).
Dagegen hilft, wenn du bei allen Grafiken die Größe mitangibst.
So ein Prelaoder ist unnötig!
Struppi.
P.S. Selbst wenn du immer noch der Meinung bist ein preloader wäre was tolles, bleibt die Antwort auf deine Frage: Es geht zum Glück nicht!
Das Problem ist nun das Array; gebe ich hier statt Bildern PDF Dokumente an, so wird das Script nicht mehr ausgeführt. Als JS Newbie kann ich mir da selber nicht weiterhelfen und richte meine Frage an euch Profis :)
Kannst du mir sagen, was ein preloader bringen soll?
Wem tust du damit einen gefallen?
Denen die JS ausgeschaltet haben und nichts mehrt passiert?
Denen mit einem Modem, die sich wundern das nichts mehr passiert?
Denen die aus versehn auf deine Seite kamen und sich dann ungefragt erstmal tonnenweise Grafiken runterladen müssen?
(Es gibt User, die ihren Internetzugang nach Menge abrechnen, d.h. du zwingst denen Kosten auf, ohne das es sie eine Wahl haben)Du sagst jetzt bestimmt, dass der Seiten aufbau schneller geht (was nicht stimmt, er egth langsamer, das du zweimal auf die Grafiken zugreigen musst (einmal von der Fetsplatte) und das es blöd aussieht wenn's so rumzappelt (was es nur im IE tut).
Dagegen hilft, wenn du bei allen Grafiken die Größe mitangibst.
So ein Prelaoder ist unnötig!
Struppi.
P.S. Selbst wenn du immer noch der Meinung bist ein preloader wäre was tolles, bleibt die Antwort auf deine Frage: Es geht zum Glück nicht!
Hi, Danke für die Antwort. Den Preloader wollte ich für eine interne Firmenseite nutzen, damit die Mitarbeiter überhaupt wissen, das noch etwas kommen wird. Manche Rechner im LAN sind etwas langsamer, so dass anstelle eines Dokuments nur eine weiße Seite angezeigt wird. Der Preloader soll dann dem Mitarbeiter anzeigen, dass etwas geladen wird.
cu elvaube
Moin Moin !
Hi, Danke für die Antwort. Den Preloader wollte ich für eine interne Firmenseite nutzen, damit die Mitarbeiter überhaupt wissen, das noch etwas kommen wird. Manche Rechner im LAN sind etwas langsamer, so dass anstelle eines Dokuments nur eine weiße Seite angezeigt wird. Der Preloader soll dann dem Mitarbeiter anzeigen, dass etwas geladen wird.
Mach's anders, je nach dem, wie in "Deinem" Intranet die Browser eingstellt sind.
PDF werden heruntergeladen und in separaten Reader geöffnet: Ladeseite mit einem animierten GIF, das Aktivität "vortäuscht" (Knight-Rider-Lauflicht oder so) und die PDF-Datei per Refresh o.ä. ausliefert.
PDF werden im Browser per Plugin angezeigt: Mit IFrames und DHTML die noch ladende PDF-Datei mit einem animierten GIF überlagern. (Hat mein Kollege in ähnlicher Form gerade gebaut, ist aber "etwas" aufwendiger.)
Das macht die Sache zwar nicht schneller, zeigt dem Normal-Benutzer aber, daß noch etwas passiert.
Alexander
Hallo,
Das Problem ist nun das Array; gebe ich hier statt Bildern PDF
Dokumente an, so wird das Script nicht mehr ausgeführt.
Ein Browser, ein gut Konfigurierter fragt erst Laden oder
Speichern soll, dann laed er die Datei.
Der Browser selbst kann ja keine PDF's Darstellen, dazu braucht
er ja ein Plug-in um diese Darzustellen. Und erst wenn das
Einstoepselteil geladen ist kann der Browser PDF's darstellen.
Und hier haengt es dann auch wieder davon ab, ob das Plug-in mit
oder ohne Aktiviertes JavaScript laeuft. Aber dann ist der
Download ja schon, meistens, laengst beendet. Bei groesseren
Dateien laedt dann Acrobat die weiter.
gruesse
jens mueller