ראשי > תפריטי dhtml נשלפים > הצבה של שכבות התפריט

הצבה של שכבות התפריט

function setup(topic)

  
  var objName="['"+topic+"']";
  innerDivs=eval(obj+objName+innerLayersLength);
  totalHeight=0;
  
  //Netscape: arrange items
  if (!document.all){ 
  eval(obj+objName+innerLayer+"[0]"+
  posWidth+"=window.innerWidth");
  for (j=1;j<innerDivs;j++)
   { layerIdx="["+j+"]";
     prevIdx="["+(j-1)+"]";
     thisLayer="obj+objName+innerLayer+layerIdx";
prevLayer="obj+objName+innerLayer+prevIdx";
thisLayer=(eval(thisLayer));
prevLayer=(eval(prevLayer));
if (j==1) {gap=2} else {gap=0}
totalHeight+=eval(prevLayer+posHeight2)+gap;
  eval(thisLayer+posTop+"="+prevLayer+
  posTop+"+"+prevLayer+posHeight2+"+gap");
  eval(prevLayer+posWidth+"=window.innerWidth");
  eval(thisLayer+posWidth+"=window.innerWidth") 
}
   }

  //MSIE: arrange items
  if (document.all){ 
  divsArray=new Array();
  divCount=0;
  tag=".tagName";
  for (j=0;j<innerDivs;j++)
   { childIdx="["+j+"]";
     thisChild=eval(obj+objName+innerLayer+childIdx+tag);
if (thisChild.toLowerCase()=="div")
  { divsArray[divCount]=j;
    divCount++
  }
}

   for (j=1;j<divsArray.length;j++)
    { layerIdx="["+divsArray[j]+"]";
      prevIdx="["+divsArray[j-1]+"]";
      thisLayer="obj+objName+innerLayer+layerIdx";
  prevLayer="obj+objName+innerLayer+prevIdx";
  thisLayer=(eval(thisLayer));
  prevLayer=(eval(prevLayer));
  if (j==1) {gap=2} else {gap=0}
  totalHeight+=eval(prevLayer+posHeight2)+gap;
  eval(thisLayer+posTop+"="+prevLayer+
  posTop+"+"+prevLayer+posHeight2+"+gap");
     }    
   
   }
   totalHeight+=eval(thisLayer+posHeight2); 
   eval(obj+objName+posHeight+"="+totalHeight);
   //eval(obj+"['backdrop']"+posHeight+"="+totalHeight);
}

פונקצית ה-setup() היא ארוכה, אך מטרתה ברורה: כמו הצבת שחקנים על לוח שחמט, כך הפונקציה מסדרת בשורה את הפריטים שבתפריט. זה, למעשה, כל מה שעושה הפונקציה, למרות שהיא עושה זאת תוך שימוש בשני חלקי קוד נפרדים, אחד לכל דפדפן. הפונקציה הזו מסתמכת על טריק ה-eval() שהדגמנו קודם, כדי ליישר אנכית את הרבדים שירכיבו כל תפריט. למרות ש-eval() אמורה למנוע את הצורך בכתיבת קוד נפרד עבור כל דפדפן, במקרה הזה לא הייתה לנו ברירה אחרת מסיבות שתוסברנה מיד.

לעמוד הקודם      לעמוד הראשי        לעמוד הבא