dhtml menu - crossесть меню как сделать так чтобы оно показывалось в НН, а также есть проблема при каждой загрузке в опере оно почему-то меняет произвольно расположение пунктов меню относительно друг друга
кто знает что делать?
// Переменные, которые нужны для работы дерева treeTop = 300; // Некоторые переменные, которые нужны скрипту nn = (document.layers)? true : false; ie = (document.all)? true : false; openImg = new Image(); openImg.src = "img/arr-open.gif"; closeImg = new Image(); closeImg.src = "img/arr-close.gif"; // Далее - функции, которые нужны дереву // Создаем объект - листо (в смысле ветка ;-) function Leaf(id,level,parent,isOpen) { this.level = level; this.parent = parent; if (parent != '') leafs[parent].children[leafs[parent].children.length] = id; this.isOpen = isOpen; this.children = new Array(); return this; } // Задаем самих листьев leafs = new Array();
leafs['leaf1'] = new Leaf('leaf1',0,'',false); leafs['leaf7'] = new Leaf('leaf7',0,'',false); leafs['leaf8'] = new Leaf('leaf8',1,'leaf7',false); leafs['leaf24'] = new Leaf('leaf24',1,'leaf7',false); leafs['leaf4'] = new Leaf('leaf4',0,'',false); leafs['leaf9'] = new Leaf('leaf9',1,'leaf4',false); leafs['leaf13'] = new Leaf('leaf13',2,'leaf9',false); leafs['leaf14'] = new Leaf('leaf14',2,'leaf9',false); leafs['leaf15'] = new Leaf('leaf15',2,'leaf9',false); leafs['leaf16'] = new Leaf('leaf16',2,'leaf9',false); leafs['leaf17'] = new Leaf('leaf17',1,'leaf4',false); leafs['leaf25'] = new Leaf('leaf25',2,'leaf17',false); leafs['leaf11'] = new Leaf('leaf11',1,'leaf4',false); leafs['leaf10'] = new Leaf('leaf10',1,'leaf4',false); leafs['leaf12'] = new Leaf('leaf12',1,'leaf4',false); leafs['leaf3'] = new Leaf('leaf3',0,'',false); leafs['leaf2'] = new Leaf('leaf2',0,'',false); leafs['leaf6'] = new Leaf('leaf6',0,'',false); leafs['leaf5'] = new Leaf('leaf5',0,'',false);
leafs['leaf0'] = new Leaf('leaf0',0,'',false); // Говорим, что только листья нулевого уровня должны быть видимыми visible = new Array() for (i in leafs) if (leafs[i].level == 0) visible[visible.length] = i; // Вытаскиваем все видимые под-элементы данного элемента (id - string!), результат - Array function visibleChildren(id) { var vChildren = new Array(); if (leafs[id].children.length > 0) { for (i in leafs[id].children) { vChildren[vChildren.length] = leafs[id].children[i]; if (leafs[leafs[id].children[i]].children.length > 0 && leafs[leafs[id].children[i]].isOpen) { vChildren = vChildren.concat(visibleChildren(leafs[id].children[i])); } } } return vChildren; } // Добавляем в Array все элементы другой Araay в указанном месте function visibleAdd(main, where, sub) { var resArr = new Array(); for (i in main) { resArr[resArr.length] = main[i]; if (main[i] == where) for (j in sub) resArr[resArr.length] = sub[j]; } return resArr; } // Убираем из однай Array все элементы другой Array function visibleRemove(main, sub) { for (i in main) for (j in sub) if (main[i] == sub[j]) delete main[i]; return main; } // Стандартная кроссбраузерная функция, которая выстраивает по вертикали дивчиков, на входе - Array с их именами function vertPlace(which) { var currTop = treeTop; if (nn) for (i in which) { document.layers[which[i]].top = currTop; currTop += document.layers[which[i]].document.height + 1; } if (ie) for (i in which) { document.all[which[i]].style.top = currTop; currTop += document.all[which[i]].offsetHeight + 1; } } // Стандартная кроссбраузерная функция показывающая слой function showLeer(which) { if (nn) document.layers[which].visibility = "show"; if (ie) document.all[which].style.visibility = "visible"; } // Стандартная кроссбраузерная функция скрывающая слой function hideLeer(which) { if (nn) document.layers[which].visibility = "hide"; if (ie) document.all[which].style.visibility = "hidden"; } // Качаем ветку, или показываем, или скрываем в зависимости от состояния function moveBough(which) { changingElems = visibleChildren(which); // alert(which+"Img"); if (leafs[which].isOpen) { visible = visibleRemove(visible,changingElems); for (i in changingElems) hideLeer(changingElems[i]); leafs[which].isOpen = false; if (nn) document.layers[which].document.images[which+"Img"].src = closeImg.src; else document.images[which+"Img"].src = closeImg.src; } else { visible = visibleAdd(visible,which,changingElems); for (i in changingElems) showLeer(changingElems[i]); leafs[which].isOpen = true; if (nn) document.layers[which].document.images[which+"Img"].src = openImg.src; else document.images[which+"Img"].src = openImg.src; } vertPlace(visible); } function moveBough1(which) { changingElems = visibleChildren(which); // alert(which+"Img"); if (leafs[which].isOpen) { } else { visible = visibleAdd(visible,which,changingElems); for (i in changingElems) showLeer(changingElems[i]); leafs[which].isOpen = true; if (nn) document.layers[which].document.images[which+"Img"].src = openImg.src; else document.images[which+"Img"].src = openImg.src; } }
// Запускаем все это! function init() { for (i in visible) showLeer(visible[i]); vertPlace(visible); } |