Avatar billede misbruger Nybegynder
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?
Avatar billede nikolajdu Nybegynder
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...
Avatar billede misbruger Nybegynder
13. november 2002 - 16:20 #2
...ok

Men kan jeg så fjerne alle layers når alt content i alle frames er loaded?
Avatar billede pelkjaer Nybegynder
13. november 2002 - 16:22 #3
ja - du kan bare skjule dem igen ved onload
Avatar billede misbruger Nybegynder
13. november 2002 - 16:23 #4
...mit spørgsmål lyder nok lidt mere på hvordan?
Avatar billede pelkjaer Nybegynder
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;
    }
  }
}
Avatar billede pelkjaer Nybegynder
13. november 2002 - 16:27 #6
<body onload="showHideLayers(Layer1,'','hide');>

og en div:

<div id="Layer1" style="position:absolute;visibility:visible;">
Avatar billede pelkjaer Nybegynder
13. november 2002 - 16:28 #7
<body onload="showHideLayers('Layer1','','hide');> Ups
Avatar billede misbruger Nybegynder
13. november 2002 - 16:38 #8
den spiller virkelig ikke for mig....

Layer fjerner sig ikke!

NB: <body onload="showHideLayers('Layer1','','hide');">
Avatar billede pelkjaer Nybegynder
13. november 2002 - 16:49 #9
Nå. Kan du uploade? Eller vise noget mere kode.
Avatar billede misbruger Nybegynder
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...?
Avatar billede pelkjaer Nybegynder
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.
Avatar billede pelkjaer Nybegynder
13. november 2002 - 17:09 #12
Det gik lidt stærkt (absolute;)
Avatar billede misbruger Nybegynder
13. november 2002 - 17:18 #13
..Og så fjerner alle layerne sig først når alt content i alle frames er loaded?
Avatar billede pelkjaer Nybegynder
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.
Avatar billede misbruger Nybegynder
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!
Avatar billede pelkjaer Nybegynder
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.
Avatar billede misbruger Nybegynder
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?
Avatar billede misbruger Nybegynder
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!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester