Логин:

Пароль:

Форумы
Общие вопросы
Document Object Model
Обсуждаем конференцию
Web Usability (test)

Web Usability (test)

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);
}
СообщениеАвторДата
ivan03.09.2004 14:38