array problem
GabiSu
- javascript
0 Konrad0 Thomas Meinike
Hallo zusammen
ich kämpfe den ganzen nachmittag mit einem problem herum und brauche mal eine grundsätzliche erläuterung.
was bedeutet diese definition??
var imagenames=[ 'map1.gif' , 'map2.gif' , 'map3.gif' , 'map4.gif' , 'map5.gif' , 'map6.gif'];
insbesondere diese eckigen klammern??
ist das ein ersatz für new array??
Ich habe nähmlich ein progressbar.js runtergeladen wo die oben.a. Zeile enthalten war.
das script ist aber im orginal nicht als function geschrieben.
nun dachte ich ich setze ein "function myprobar(imagenames) {"
davor und am ende noch "}" ein, komentiere o.a.Zeile aus und das wäre es dann, aber die variable hat einfach keinen inhalt.
mein aufruf aus dem scriptbereich des htmlfile
sieht so aus:
meinebilder=new Array('bild1.jpg','bild2.jpg','bild3.jpg',... 'bild32.jpg');
myprobar(meinebilder)"
das müsste doch richtig sein, aber offensichtlich nicht!!
danke schon jetzt
gabi
var imagenames=[ 'map1.gif' , 'map2.gif' , 'map3.gif' , 'map4.gif' , 'map5.gif' , 'map6.gif'];
Habe ich auch noch nie gesehen
mein aufruf aus dem scriptbereich des htmlfile
sieht so aus:
meinebilder=new Array('bild1.jpg','bild2.jpg','bild3.jpg',... 'bild32.jpg');
myprobar(meinebilder)"
Warum willst Du eigentlich das Array meinebilder übergeben? Du hast es doch außerhalb als globale Variable definiert. Laß es mal einfach weg und versuch es dann. Man müsste natürlich wissen wie es weitergeht, um Dir helfen zu können.
Hallo,
danke für deine Antwort.
Ich habe es mal direct versucht, ohne das array an die funktion zu übergeben.
Ich will hier jetzt ausführlicher werden
Hier erst mal das script komplett
welches in einer separaten js-datei steht.
[CODE]
function mypreloader()
{
// Progressbar - Version 2.5
// Author: Brian Gosselin of http://scriptasylum.com
// PUT THE NAMES OF ALL YOUR IMAGES THAT NEED TO BE "CACHED" IN THE "imagenames" ARRAY.
// DONT FORGET THE COMMA BETWEEN EACH ENTRY, OR THE TICK MARKS AROUND EACH NAME.
var imagenames=new Array();
alert (bilder.length);
var j=0; //var for the imagenames array
for (i=1;i<bilder.length;i+=2) // only each second picture has to be loaded
{
imagenames[j]=bilder[i];
//imagenames2=imagenames2+" '"+mypics[i]+"' ,";
alert(bilder[i]+" "+j+" ");
document.writeln(imagenames[j]+"<br>"); // only for checkout
j=j+1;
}
// this is the origin line
// var imagenames=[ 'images/zulauf_450_S.jpg', 'images/zulauf_haus_450_S.jpg', 'images/zulauf_haus3_450_S.jpg', 'images/zulauf_terasse_450_S.jpg'];
var loadedcolor='red' ; // PROGRESS BAR COLOR
var unloadedcolor='#FDC558'; // BGCOLOR OF UNLOADED AREA
var barheight=17; // HEIGHT OF PROGRESS BAR IN PIXELS
var barwidth=300; // WIDTH OF THE BAR IN PIXELS
var bordercolor='#910029'; // COLOR OF THE BORDER
var textColor='black'; // COLOR OF TEXT IN LOADING BAR
var textSize='10px'; // SIZE OF TEXT IN LOADING BAR
var textFont='verdana'; // FONT FAMILY OF TEXT IN LOADING BAR
//var loadonce=true; // IF THIS VALUE IS true THE BAR WILL NOT DISPLAY IF THE USER
var loadonce=false; // IF THIS VALUE IS true THE BAR WILL NOT DISPLAY IF THE USER
// RETURNS TO THE PAGE, SET TO false TO HAVE THE BAR REAPPEAR IF
// THE USER RETURNS TO THE PAGE.
// THE FUNCTION BELOW CONTAINS THE ACTION(S) TAKEN ONCE IMAGES ARE DONE LOADING.
// IF NO ACTION IS DESIRED, TAKE EVERYTHING OUT FROM BETWEEN THE CURLY BRACES ({})
// BUT LEAVE THE FUNCTION NAME AND CURLY BRACES IN PLACE. PRESENTLY, IT IS SET TO
// DO NOTHING, BUT CAN BE CHANGED EASILY. TO CAUSE A REDIRECT, INSERT THE FOLLOWING
// LINE IN BETWEEN THE CURLY BRACES:
// document.location.href="http://www.redirect_page.html";
// JUST CHANGE THE ACTUAL PAGE IT "POINTS" TO.
var action=function()
{
//document.location.href="newpage.html";
}
//*****************************************************//
//******** NO NEED TO EDIT BEYOND THIS POINT ********//
//*****************************************************//
var NS4 = (document.layers)? true : false;
var IE4 = (document.all)? true : false;
var blocksize=(barwidth-2)/(imagenames.length);
barheight=Math.max(barheight,4);
var loaded=0;
var perouter=null;
var perdone=null;
var images=new Array();
var txt='';
if(NS4){
txt+='<table cellspacing=0 cellpadding=0 border=0><tr><td>';
txt+='<ilayer name="perouter" visibility="hide" height="'+barheight+'" width="'+barwidth+'">';
txt+='<layer width="'+barwidth+'" height="'+barheight+'" bgcolor="'+bordercolor+'" top="0" left="0"></layer>';
txt+='<layer width="'+(barwidth-2)+'" height="'+(barheight-2)+'" bgcolor="'+unloadedcolor+'" top="1" left="1"></layer>';
txt+='<layer name="perdone" width="'+(barwidth-2)+'" height="'+(barheight-2)+'" bgcolor="'+loadedcolor+'" top="1" left="1"></layer>';
txt+='<layer width="'+(barwidth-2)+'" height="'+(barheight-2)+'" top="1" left="1">';
txt+='<table cellpadding=0 cellspacing=0 border=0 width="'+(barwidth-2)+'" height="'+(barheight-2)+'"><tr><td align="center" valign="middle">';
txt+='<span style="color:'+textColor+'; font-size:'+textSize+'; font-family:'+textFont+'">Processing... (click to dismiss)</span>';
txt+='</td></tr></table>';
txt+='</layer>';
txt+='</ilayer>';
txt+='</td></tr></table>';
}else{
txt+='<div id="perouter" style="position:relative; visibility:hidden; background-color:'+bordercolor+'; width:'+barwidth+'px; height:'+barheight+'px;">';
txt+='<div style="position:absolute; top:1px; left:1px; width:'+(barwidth-2)+'px; height:'+(barheight-2)+'px; background-color:'+unloadedcolor+'; font-size:1px;"></div>';
txt+='<div id="perdone" style="position:absolute; top:1px; left:1px; width:0px; height:'+(barheight-2)+'px; background-color:'+loadedcolor+'; font-size:1px;"></div>';
txt+='<div style="position:absolute; top:2px; left:1px; width:'+(barwidth-2)+'px; height:'+(barheight-2)+'px; color:'+textColor+'; font-size:'+textSize+'; font-family:'+textFont+'; text-align:center; cursor:default">Processing... (click to dismiss)</div>';
txt+='</div>';
}
document.write(txt);
//THIS FUNCTION BY MIKE HALL OF BRAINJAR.COM
function findlayer(name,doc){
var i,layer;
for(i=0;i<doc.layers.length;i++){
layer=doc.layers[i];
if(layer.name==name)return layer;
if(layer.document.layers.length>0)
if((layer=findlayer(name,layer.document))!=null)
return layer;
}
return null;
}
function loadimages(){
perouter=(NS4)?findlayer('perouter',document):(IE4)?document.all['perouter']:document.getElementById('perouter');
perdone=(NS4)?perouter.document.layers['perdone']:(IE4)?document.all['perdone']:document.getElementById('perdone');
if(NS4)perouter.captureEvents(Event.MOUSEUP);
perouter.onmouseup=hideperouter;
clipEl(perdone,0,0,barheight-2,0);
if(NS4)perouter.visibility="show";
else perouter.style.visibility="visible";
for(n=0;n<imagenames.length;n++){
images[n]=new Image();
images[n].src=imagenames[n];
if(images[n].complete)dispbars();
images[n].onload=dispbars;
images[n].onerror=dispbars;
}}
function dispbars(){
loaded++;
clipEl(perdone, 0, blocksize*loaded, barheight-2, 0);
if(loaded>=imagenames.length)setTimeout('hideperouter()', 800);
}
function hideperouter(){
if(NS4)perouter.visibility="hide";
else perouter.style.visibility="hidden";
action();
}
function clipEl(el, ct, cr, cb, cl){
if(NS4){
el.clip.left=cl;
el.clip.top=ct;
el.clip.right=cr;
el.clip.bottom=cb;
}else el.style.width=cr+'px';
}
//CREDIS TO DYNAMICDRIVE FOR THE FUNCTION BELOW
function get_cookie(Name) {
var search=Name+"=";
var returnvalue="";
if(document.cookie.length>0){
offset=document.cookie.indexOf(search);
if(offset!=-1){
offset+=search.length;
end=document.cookie.indexOf(";",offset);
if(end==-1)end=document.cookie.length;
returnvalue=unescape(document.cookie.substring(offset,end));
}}
return returnvalue;
}
window.onload=function(){
var okPB=false;
if (loadonce){
if(get_cookie("progB")==""){
okPB=true;
document.cookie="progB=yes";
}}
else okPB=true;
if(okPB)setTimeout('loadimages()',300);
}
} // end mypreloader
[/CODE]
das wird nun aus dem html file wie folgt aufgerufen:
[CODE]
<script language="javascript" src="/jssource/progressbar.js"></script>
<script language="JavaScript">
bilder=["images/zulauf_100.jpg","images/zulauf_450_S.jpg","images/zulauf_haus_100.jpg","images/zulauf_haus_450_S.jpg"];
mypreloader();
</script>
[/CODE]
lass dich nict irritieren durch die definition des arrays bilder mit den eckigen Klammern.
Ich habe es auch mit der mir bekannten Variante bilder=new array('bild1.jpg', .....)
es funzt einfach nicht.
Danke für deine Hilfe
alert (bilder.length);
Was sagt er denn hierauf? undefined? oder hat er die bilder?
[CODE]
<script language="javascript" src="/jssource/progressbar.js"></script>
<script language="JavaScript">
bilder=["images/zulauf_100.jpg","images/zulauf_450_S.jpg","images/zulauf_haus_100.jpg","images/zulauf_haus_450_S.jpg"];
mypreloader();
</script>
[/CODE]
versuch doch mal im HTML-Teil alert(bilder.length). Wenn es da funktioniert, er also 4 oder 5 anzeigt, dann sollte die Variable bilder eigentlich auch innerhalb der Funktion mypreloader definiert sein. Wenn nich, dann weiß ich auch nicht mehr weiter.
Viel Glück
Konrad
Hallo alle zusammen,
ich habe innerhalb der function
bereits diesen code für testzwecke eingebaut.
[CODE]
var imagenames=new Array();
alert (bilder.length);
var j=0; //var for the imagenames array
for (i=1;i<bilder.length;i+=2) // only each second picture has to be loaded
{
imagenames[j]=bilder[i];
alert(bilder[i]+" "+j+" ");
document.writeln(imagenames[j]+"<br>"); // only for checkout
j=j+1;
}
[/CODE]
er bringt mir im alert fenster so wie auch in der textanzeige der seite alle namen der bilder die im aufrufenden Teil (siehe posting von gestern) genannt sind. das heist die variable bilder so wie auch die variable imagenames haben innerhalb der function den selben inhalt.
Es ist dabei gleichgültig ob die definition von bilder
mit diesen eckigen klammern oder mit new(array) im aufrufenden scriptteil der html datei gemacht wird.
beides funzt.
Es gibt irgenein Problem innerhalb der späteren verwendung der variablen imagenames innerhalb des downgelodeten scripts.
Diese variable ist ja vom programmierer dieses preload-scripts für
alle weiteren aktionen vorgesehen worden.
Ursprünglich ist das script nicht als function geschrieben worden sondern als script-teil den man in die html datei zwischen den script tags einsetzen sollte.
Das es jetzt als function ausgeführt ist mein ausdrücklicher wunsch weil ich diese functon in unterschiedliche html seiten aufrufen möchte.
Ich bekomme ja leider in der statuszeile nur angezeigt das ein fehler aufgetreten ist.
Welcher Fehler in welcher Zeile wird ja eben nicht mitgeteilt.
Wie kann man übrigens javascript sonst auf fehler prüfen so das man den Satz angezeigt bekommt wo der fehler auftritt.??
Gruß
Gabi
Hallo,
ich kämpfe den ganzen nachmittag mit einem problem herum und brauche mal eine grundsätzliche erläuterung.
was bedeutet diese definition??
var imagenames=[ 'map1.gif' , 'map2.gif' , 'map3.gif' , 'map4.gif' , 'map5.gif' , 'map6.gif'];
insbesondere diese eckigen klammern??
ist das ein ersatz für new array??
Eine eher seltene Schreibweise, die in aktuellen Scripting-Engines (incl. Netscape 4.x) funktioniert:
var a=[1,2,3,4,5];
alert(a[3]); // --> 4
MfG, Thomas