13. november 2002 - 15:41
Der er
17 kommentarer og 1 løsning
Layer hen over frames
Jeg vil gerne lave et script, som ligger et layer hen over mine frames, indtil at alle frames og alt indholdet i framesne er loaded... Like how?
Annonceindlæg tema
Cloud & AI
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
13. november 2002 - 16:14
#1
Du kan ikke lave layers på tværs af frames. Du kan lave et layers i hver frame og så skjule dem når den er loadet ind...
13. november 2002 - 16:20
#2
...ok Men kan jeg så fjerne alle layers når alt content i alle frames er loaded?
13. november 2002 - 16:22
#3
ja - du kan bare skjule dem igen ved onload
13. november 2002 - 16:23
#4
...mit spørgsmål lyder nok lidt mere på hvordan?
13. november 2002 - 16:26
#5
// Eks: obj = findObj("pic1"); function findObj(theObj, theDoc) { var p, i, foundObj; if(!theDoc) theDoc = document; if( (p = theObj.indexOf("?")) > 0 && parent.frames.length) { theDoc = parent.frames[theObj.substring(p+1)].document; theObj = theObj.substring(0,p); } if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj]; for (i=0; !foundObj && i < theDoc.forms.length; i++) foundObj = theDoc.forms[i][theObj]; for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++) foundObj = findObj(theObj,theDoc.layers[i].document); if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj); return foundObj; } // Eks: showHideLayers(Layer1,'','show',Layer2,'','hide'); function showHideLayers() { var i, visStr, obj, args = showHideLayers.arguments; for (i=0; i<(args.length-2); i+=3) { if ((obj = findObj(args[i])) != null) { visStr = args[i+2]; if (obj.style) { obj = obj.style; if(visStr == 'show') visStr = 'visible'; else if(visStr == 'hide') visStr = 'hidden'; } obj.visibility = visStr; } } }
13. november 2002 - 16:27
#6
<body onload="showHideLayers(Layer1,'','hide');> og en div: <div id="Layer1" style="position:absolute;visibility:visible;">
13. november 2002 - 16:28
#7
<body onload="showHideLayers('Layer1','','hide');> Ups
13. november 2002 - 16:38
#8
den spiller virkelig ikke for mig.... Layer fjerner sig ikke! NB: <body onload="showHideLayers('Layer1','','hide');">
13. november 2002 - 16:49
#9
Nå. Kan du uploade? Eller vise noget mere kode.
13. november 2002 - 17:04
#10
det er lidt svært at vise kode, når det er spredt ud over 6 frames! Jeg har nok et forståelses problem....! Jeg har lagt layeret i alle mine frames. Jeg har prøvet at ligge scriptet i et enkelt frame, samt i alle frames. Men layeret bliver ikke fjernet, og jeg har lagt onload eventen i alle body tags...?
13. november 2002 - 17:08
#11
Well, dette virker fint hos mig: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <script type="text/javascript"> // Eks: obj = findObj("pic1"); function findObj(theObj, theDoc) { var p, i, foundObj; if(!theDoc) theDoc = document; if( (p = theObj.indexOf("?")) > 0 && parent.frames.length) { theDoc = parent.frames[theObj.substring(p+1)].document; theObj = theObj.substring(0,p); } if(!(foundObj = theDoc[theObj]) && theDoc.all) foundObj = theDoc.all[theObj]; for (i=0; !foundObj && i < theDoc.forms.length; i++) foundObj = theDoc.forms[i][theObj]; for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++) foundObj = findObj(theObj,theDoc.layers[i].document); if(!foundObj && document.getElementById) foundObj = document.getElementById(theObj); return foundObj; } // Eks: showHideLayers(Layer1,'','show',Layer2,'','hide'); function showHideLayers() { var i, visStr, obj, args = showHideLayers.arguments; for (i=0; i<(args.length-2); i+=3) { if ((obj = findObj(args[i])) != null) { visStr = args[i+2]; if (obj.style) { obj = obj.style; if(visStr == 'show') visStr = 'visible'; else if(visStr == 'hide') visStr = 'hidden'; } obj.visibility = visStr; } } } </script> </head> <body onload="showHideLayers('Layer1','','hide')";> <div id="Layer1" style="position:absoluteM width:200px;height:200px;background-color:#eee;visibility:visible;">hej</div> </body> </html> Alle dine sider i framesettet skal se sådan ud.
13. november 2002 - 17:09
#12
Det gik lidt stærkt (absolute;)
13. november 2002 - 17:18
#13
..Og så fjerner alle layerne sig først når alt content i alle frames er loaded?
13. november 2002 - 17:23
#14
Well ikke når alle frames er loaded, men når den frame det enkelte layer ligger i er loadet.
13. november 2002 - 17:34
#15
...og det er der den fejler..... Det script du har lavet, har jeg selv lavet.... <!-- Begin page loader function loadPage(){ if (document.getElementById){ document.getElementById('hidepage').style.visibility = 'hidden'; } else{ if (document.layers){ document.hidepage.visibility = 'hidden'; } else{ document.all.hidepage.style.visibility = 'hidden'; } } } // End page loader --> Men det fjerne heller ikke layersne synkront, når alt er loaded!
13. november 2002 - 17:42
#16
Nej, og hvordan skulle de kunne det? Siderne i et frameset er jo uafhængige af hinanden. Du kunne evt. bruge en timeout på funktionen, men om det er en god løsning skal jeg lade være usagt.
13. november 2002 - 19:19
#17
jeg tror selv jeg har udtænkt løsningen.... Nu skal der bare skrives kode.. Alle sider i mit frameset starter med et layer hen over. Når siden er loaded, trigges eventen onload, der kalder et array i parent. Når alle poster i mit array er blevet sat til true. Så fjerner jeg alle layers fra scriptet. Tror du den vil spille?
15. november 2002 - 14:43
#18
Min løsning virker..... I mit frameset ligger dette script: pageArr = new Array(false,false,false,false,false,false); function updateArray(obj){ pageArr[obj] = true; if(pageArr[0] == true && pageArr[1] == true && pageArr[2] == true && pageArr[3] == true && pageArr[4] == true && pageArr[5] == true){ if (TopFrame.document.getElementById){ TopFrame.document.getElementById('hidepage').style.visibility = 'hidden'; BarFrame.document.getElementById('hidepage').style.visibility = 'hidden'; MenuFrame.document.getElementById('hidepage').style.visibility = 'hidden'; ContentFrame.document.getElementById('hidepage').style.visibility = 'hidden'; RightFrame.document.getElementById('hidepage').style.visibility = 'hidden'; BottomFrame.document.getElementById('hidepage').style.visibility = 'hidden'; } else{ if (TopFramedocument.layers){ TopFrame.document.hidepage.visibility = 'hidden'; BarFrame.document.hidepage.visibility = 'hidden'; MenuFrame.document.hidepage.visibility = 'hidden'; ContentFrame.document.hidepage.visibility = 'hidden'; RightFrame.document.hidepage.visibility = 'hidden'; parent.contentframe.document.hidepage.visibility = 'hidden'; } else{ TopFrame.document.all.hidepage.style.visibility = 'hidden'; BarFrame.document.all.hidepage.style.visibility = 'hidden'; MenuFrame.document.all.hidepage.style.visibility = 'hidden'; ContentFrame.document.all.hidepage.style.visibility = 'hidden'; RightFrame.document.all.hidepage.style.visibility = 'hidden'; BottomFrame.document.all.hidepage.style.visibility = 'hidden'; } } } } På hver side i mit frameset ligger jeg så: <body bgcolor="#FFFFFF" marginwidth="0" marginheight="0" onLoad="parent.updateArray(0);"> <div id="hidepage" style="position: absolute; left:0px; top:0px; background-color: #cccccc; layer-background-color: #cccccc; height: 100%; width: 100%; z-index: 3;"></div> Hvor 'værdi' i parrent.updateArray(værdi); svare til det nummer man tildeler frame The shit works!
Vi tilbyder markedets bedste kurser inden for webudvikling