Проблема со скриптом выпадающего меню

Старый mweb

Модератор: [mweb team]

Проблема со скриптом выпадающего меню

Сообщение PanKozulskiy Вс мар 30, 2008 13:34

Доброго времени суток!
Воспользовался поиском, но ответа на вопрос не нашел. На одном сайте есть скрипт многоуровневого выпадающего меню. А как его можно выровнять по центру страницы?

Ширину изменил так:
с этого
Код: Выделить всё
newRoot = startDL('rootMenu', 0, 0, '100%', 17, 'hidden', '#666699', null, 100, '');

на это
Код: Выделить всё
newRoot = startDL('rootMenu', 0, 0, '800', 17, 'hidden', '#666699', null, 100, '');

Положение по оси "y" так:
Код: Выделить всё
newRoot = startDL('rootMenu', 0, 153, '800', 17, 'hidden', '#666699', null, 100, '');

Если не правильно, поправте

Заранее благодарен

P.S. При попытке добавить дополнительные пункты в главном меню - происходит ошибка.
Пытаюсь добавить так:
Код: Выделить всё
<SCRIPT LANGUAGE="JavaScript">
var menu = new Array();
var defOver = '#666699', defBack = '#003366', defBorder = '#000000';
var defHeight = 22;
menu[0] = new Array();
menu[0][0] = new Menu('rootMenu', 0, 0, 80, '#666699', '#666699', defBorder);
menu[0][1] = new Item('menu1', '#', defHeight, 1);
menu[0][2] = new Item('menu2', '#', defHeight, 2);
menu[0][3] = new Item('menu3', '#', defHeight, 3);
menu[0][4] = new Item('menu4', '#', defHeight, 4);
menu[0][5] = new Item('menu5', '#', defHeight, 5);
menu[1] = new Array();
menu[1][0] = new Menu('menu1', 0, 22, 80, defOver, defBack, defBorder);
menu[1][1] = new Item('Yandex', 'http://www.yandex.ru', defHeight, 0);
menu[1][2] = new Item('ka5', '#', defHeight, 0);
menu[1][3] = new Item('Linka6', '#', defHeight, 0);
menu[1][4] = new Item('Linka7', '#', defHeight, 0);
menu[1][5] = new Item('Linka8', '#', defHeight, 0);
menu[2] = new Array();
menu[2][0] = new Menu('menu2', 0, 22, 80, defOver, defBack, defBorder);
menu[2][1] = new Item('Linka9', '#', defHeight, 0);
menu[2][2] = new Item('Linka10', '#', defHeight, 0);
menu[2][3] = new Item('Linka11', '#', defHeight, 0);
menu[3] = new Array();
menu[3][0] = new Menu('menu3', 0, 22, 80, defOver, defBack, defBorder);
menu[3][1] = new Item('Linka12', '#', defHeight, 0);
menu[3][2] = new Item('Linka13', '#', defHeight, 0);
menu[3][3] = new Item('Linka14', '#', defHeight, 0);
menu[4] = new Array();
menu[4][0] = new Menu('menu4', 0, 22, 80, defOver, defBack, defBorder);
menu[4][1] = new Item('Linka15', '#', defHeight, 0);
menu[4][2] = new Item('Linka16', '#', defHeight, 0);
menu[4][3] = new Item('Linka17', '#', defHeight, 0);
menu[5] = new Array();
menu[5][0] = new Menu('menu5', 0, 22, 80, defOver, defBack, defBorder);
menu[5][1] = new Item('Linka18', '#', defHeight, 0);
menu[5][2] = new Item('Linka19', '#', defHeight, 0);
menu[5][3] = new Item('Linka20', '#', defHeight, 0);
newRoot = startDL('rootMenu', 102, 153, '800', 17, 'hidden', '#666699', null, 100, '');
newRoot += startDL('rootMenu1', 5, 0, 80, 17, 'inherit', '#666699', null, 100, mouseProps(0, 1));
newRoot += '<span class="Item">  menu1</span>' + endDL;
newRoot += startDL('rootMenu2', 110, 0, 80, 17, 'inherit', '#666699', null, 100, mouseProps(0, 2));
newRoot += '<span class="Item">  menu2</span>' + endDL;
newRoot += startDL('rootMenu3', 210, 0, 60, 17, 'inherit', '#666699', null, 100, mouseProps(0, 3));
newRoot += '<span class="Item">  menu3</span>' + endDL;
newRoot += startDL('rootMenu3', 290, 0, 130, 17, 'inherit', '#666699', null, 100, mouseProps(0, 4));
newRoot += '<span class="Item">  menu4</span>' + endDL;
newRoot += startDL('rootMenu3', 444, 0, 90, 17, 'inherit', '#666699', null, 100, mouseProps(0, 5));
newRoot += '<span class="Item">  menu5</span>' + endDL;
newRoot += endDL;
PanKozulskiy
Прохожий
 
Сообщения: 7
Зарегистрирован: Вс мар 30, 2008 13:24

Сообщение Muerto Вс мар 30, 2008 14:13

По ссылке меню не обнаружено. По постскрипту - какая ошибка вылазит?
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение PanKozulskiy Вс мар 30, 2008 14:26

Ссылочка рабочая - проверил. Перестают выпадать меню.

Вот полный скрипт:
Код: Выделить всё
<SCRIPT LANGUAGE="JavaScript">
var isDOM = false, isNS4 = false;
if (document.all) var isDOM = true, docObj = 'document.all.', styObj = '.style';
else if (document.layers) var isNS4 = true, docObj = 'document.', styObj = '';
var popTimer = 0;
var litNow = new Array();
function popOver(menuNum, itemNum) {
clearTimeout(popTimer);
hideAllBut(menuNum);
litNow = getTree(menuNum, itemNum);
changeCol(litNow, true);
targetNum = menu[menuNum][itemNum].target;
if (targetNum > 0) {
targetName = menu[targetNum][0].id;
menuName = menu[menuNum][0].id;
menuRef = eval(docObj + menuName + styObj);
thisX = parseInt(menuRef.left);
thisY = parseInt(menuRef.top);
itemPath = docObj;
if (isNS4) itemPath += menuName + '.document.';
itemRef = eval(itemPath + menuName + itemNum.toString() + styObj);
thisX += parseInt(itemRef.left);
thisY += parseInt(itemRef.top);
with (eval(docObj + targetName + styObj)) {
left = parseInt(thisX + menu[targetNum][0].x);
top = parseInt(thisY + menu[targetNum][0].y);
visibility = 'visible';
      }
   }
}
function popOut(menuNum, itemNum) {
popTimer = setTimeout('hideAllBut(0)', 500);
}
function getTree(menuNum, itemNum) {
itemArray = new Array(menu.length);
while(1) {
itemArray[menuNum] = itemNum;
if (menuNum == 0) return itemArray;
itemNum = menu[menuNum][0].parentItem;
menuNum = menu[menuNum][0].parentMenu;
   }
}
function changeCol(changeArray, isOver) {
for (menuCount = 0; menuCount < changeArray.length; menuCount++) {
if (changeArray[menuCount]) {
thisMenu = menu[menuCount][0].id;
thisItem = thisMenu + changeArray[menuCount].toString();
newCol = isOver ? menu[menuCount][0].overCol : menu[menuCount][0].backCol;
if (isDOM) document.all[thisItem].style.backgroundColor = newCol;
if (isNS4) document[thisMenu].document[thisItem].bgColor = newCol;
      }
   }
}
function hideAllBut(menuNum) {
var keepMenus = getTree(menuNum, 1);
for (count = 0; count < menu.length; count++)
if (!keepMenus[count])
eval(docObj + menu[count][0].id + styObj + '.visibility = "hidden"');
changeCol(litNow, false);
}
var endDL = isDOM ? '</div>' : '</layer>';
function Menu(id, x, y, width, overCol, backCol, borderCol) {
this.id = id;
this.x = x;
this.y = y;
this.width = width;
this.overCol = overCol;
this.backCol = backCol;
this.borderCol = borderCol;
this.parentMenu = null;
this.parentItem = null;
}
function Item(text, href, height, target) {
this.text = text;
this.href = href;
this.height = height;
this.target = target;
}
function startDL(id, x, y, width, height, vis, back, border, zIndex, extraProps) {
if (isDOM) {
str = '<div id="' + id + '" style="position: absolute; left: ' + x + '; top: ' + y +
'; width: ' + width + '; height: ' + height + '; visibility: ' + vis + '; ';
if (back) str += 'background: ' + back + '; ';
if (border) str += 'padding: 3px; border: 1px solid ' + border + '; ';
if (zIndex) str += 'z-index: ' + zIndex + '; ';
str += '" ';
}
if (isNS4) {
str = '<layer id="' + id + '" left="' + x + '" top="' + y + '" width="' + width +
'" height="' + height + '" visibility="' + vis + '" ';
if (back) str += 'bgcolor="' + back + '" ';
if (border) str += 'style="border: 1px solid ' + border + '" ';
if (zIndex) str += 'z-index="' + zIndex + '" ';
}
return str + extraProps + '>';
}
function mouseProps(currMenu, currItem) {
return 'onMouseOver="popOver(' + currMenu + ',' + currItem + ')" onMouseOut="popOut(' + currMenu + ',' + currItem + ')"';
}
function writeMenus(customRoot, popInd) {
for (currMenu = 0; currMenu < menu.length; currMenu++) {
showMenu = true;
if ((currMenu == 0) && customRoot) {
document.write(customRoot);
showMenu = false;
}
with (menu[currMenu][0]) {
menuHTML = startDL(id, x, y, 0, 0, 'hidden', null, null, 100, '');
var back = backCol, bord = borderCol, currWidth = width - 8;
}
itemPos = 0;
for (currItem = 1; currItem < menu[currMenu].length; currItem++) {
trigID = menu[currMenu][0].id + currItem.toString();
with (menu[currMenu][currItem]) {
menuHTML += startDL(trigID, 0, itemPos, 0, 0, 'inherit', back, bord, 100, mouseProps(currMenu, currItem)) + '<table width="' + currWidth + '" border="0" cellspacing="0" cellpadding="0"><tr>' + '<td align="left"><a class="Item" href="' + href + '">' + text + '</a></td>' + '<td class="Item" align="right">' + (target ? popInd : '') + '</td></tr></table>' + endDL;
if (target > 0) {
menu[target][0].parentMenu = currMenu;
menu[target][0].parentItem = currItem;
}
itemPos += height;
   }
}

if (showMenu) document.write(menuHTML + endDL);
litNow[currMenu] = null;
   }
}
</script>

<style>
<!--
.Item { text-decoration: none; color: #FFFFFF; font: 12px Arial, Helvetica }
-->
</style>

<SCRIPT LANGUAGE="JavaScript">
var menu = new Array();
var defOver = '#666699', defBack = '#003366', defBorder = '#000000';
var defHeight = 22;
menu[0] = new Array();
menu[0][0] = new Menu('rootMenu', 0, 0, 80, '#666699', '#666699', defBorder);
menu[0][1] = new Item('menu1', '#', defHeight, 1);
menu[0][2] = new Item('menu2', '#', defHeight, 2);
menu[0][3] = new Item('menu3', '#', defHeight, 3);
menu[1] = new Array();
menu[1][0] = new Menu('menu1', 0, 22, 80, defOver, defBack, defBorder);
menu[1][1] = new Item('Yandex', 'http://www.yandex.ru', defHeight, 0);
menu[1][2] = new Item('ka5', '#', defHeight, 0);
menu[1][3] = new Item('Linka6', '#', defHeight, 0);
menu[1][4] = new Item('Linka7', '#', defHeight, 0);
menu[1][5] = new Item('Linka8', '#', defHeight, 0);
menu[2] = new Array();
menu[2][0] = new Menu('menu2', 0, 22, 80, defOver, defBack, defBorder);
menu[2][1] = new Item('Linka9', '#', defHeight, 0);
menu[2][2] = new Item('Linka10', '#', defHeight, 0);
menu[2][3] = new Item('Linka11', '#', defHeight, 0);
menu[3] = new Array();
menu[3][0] = new Menu('menu3', 0, 22, 80, defOver, defBack, defBorder);
menu[3][1] = new Item('Linka12', '#', defHeight, 0);
menu[3][2] = new Item('Linka13', '#', defHeight, 0);
menu[3][3] = new Item('Linka14', '#', defHeight, 0);
newRoot = startDL('rootMenu', 102, 153, '800', 17, 'hidden', '#666699', null, 100, '');
newRoot += startDL('rootMenu1', 5, 0, 80, 17, 'inherit', '#666699', null, 100, mouseProps(0, 1));
newRoot += '<span class="Item">  menu1</span>' + endDL;
newRoot += startDL('rootMenu2', 110, 0, 80, 17, 'inherit', '#666699', null, 100, mouseProps(0, 2));
newRoot += '<span class="Item">  menu2</span>' + endDL;
newRoot += startDL('rootMenu3', 210, 0, 60, 17, 'inherit', '#666699', null, 100, mouseProps(0, 3));
newRoot += '<span class="Item">  menu3</span>' + endDL;
writeMenus(newRoot, '>');
if (isNS4) document.captureEvents(Event.CLICK);
document.onclick = clickHandle;
function clickHandle(evt) {
if (isNS4) document.routeEvent(evt);
hideAllBut(0);
}
eval(docObj + menu[0][0].id + styObj + '.visibility = "visible"');
function moveRoot() {
rM = eval(docObj + menu[0][0].id + styObj);
if (parseInt(rM.top) < 40) rM.top = 40;
else rM.top = 0;
}
</script>


Как его отцентровать и добавить дополнительные пункты?
PanKozulskiy
Прохожий
 
Сообщения: 7
Зарегистрирован: Вс мар 30, 2008 13:24

Сообщение Muerto Вс мар 30, 2008 22:14

Меню работает только под ИЕ=<7. Оно тебе нужно? Может другой скрипт возьмёшь? Или этот тебе нужен именно?
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение PanKozulskiy Вс мар 30, 2008 23:26

Нет, не принципиально. Конечно хотелось бы "+" ксовместимости - Опера, ФайрФокс и т.д.
Если не трудно, то какую нибудь ссылочку на подобный скриптик. Единственно, нужно наличие возможности расположения меню по центру и полное редактирование пунктов.
PanKozulskiy
Прохожий
 
Сообщения: 7
Зарегистрирован: Вс мар 30, 2008 13:24

Сообщение Padonak Пн мар 31, 2008 7:26

да вот отсюда выдерни скрипт http://www.agnitum.com/

или копни вот тут http://woweb.ru/load/100
Uncaught TypeError: Изображение

Изображение
Аватара пользователя
Padonak
Философ-разговорник
 
Сообщения: 3872
Зарегистрирован: Вт дек 13, 2005 3:23
Откуда: Ростов-на-Дону

Сообщение PanKozulskiy Пн мар 31, 2008 9:27

У Agnitum скрипт на якорях таблицы как я понял. А у меня Баннер+меню в общем поле. При выпадении, меню не будет позади центральной страницы?

А проверенного скрипта на "неглючность" нет?
PanKozulskiy
Прохожий
 
Сообщения: 7
Зарегистрирован: Вс мар 30, 2008 13:24

Сообщение PanKozulskiy Пн мар 31, 2008 13:41

По указанной ссылочке нашел вот такой скрипт, но опять проблема с его расположением. Как его можно отцентровать и опустить по оси "у" на нужное кол-во точек?

параметры есть, но при попытке их изменить, все меню смещается в одну точку.

Видимо придется отказаться от общего поля для всех страниц - так не отображается меню...
Последний раз редактировалось PanKozulskiy Пн мар 31, 2008 13:53, всего редактировалось 1 раз.
PanKozulskiy
Прохожий
 
Сообщения: 7
Зарегистрирован: Вс мар 30, 2008 13:24

Сообщение Muerto Пн мар 31, 2008 13:42

Попробуй AllWebMenus.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение PanKozulskiy Пн мар 31, 2008 14:15

Програмка путевая, но без активации не компилирует.

А по вышеуказанному скрипту, вариантов нет?
Может проблема в том что в _borders не видны скрипты? интегрировать их в страничку?
PanKozulskiy
Прохожий
 
Сообщения: 7
Зарегистрирован: Вс мар 30, 2008 13:24

Сообщение Muerto Пн мар 31, 2008 17:52

Со скриптом лень разбираться, но раз там меню абсолютно позиционированно, поставь ты скрипт типа document.getElementById("menu1").style.left = (document.body.offsetWidth - document.getElementById("menu1").offsetWidth)/2 +"px"; но чтобы подо всеми браузерами размер окна определялся и вот тебе центрирование.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение Muerto Пн мар 31, 2008 18:12

2PanKozulskiy: С отступом я посмотрю из дома вечером.
P.-S. Сорри, встретился с заказчиком и нажрался как свинья. Посмотрю утром с работы. На счет активатора к ОлВебМеню - погугли, есть.
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва

Сообщение PanKozulskiy Пн мар 31, 2008 23:54

2Muerto: спс
PanKozulskiy
Прохожий
 
Сообщения: 7
Зарегистрирован: Вс мар 30, 2008 13:24

Сообщение Muerto Вт апр 01, 2008 14:01

2PanKozulskiy: По второму могу пока порекомендовать в стилевой лист прописать для всех твоих выпадающих блоков меню отступ.
Типа:
Код: Выделить всё
div#menu2, div#menu4 {margin-top:10px;}
Nadie hablara de nosotras cuando hayamos muerto.
www.muerto.ru
Аватара пользователя
Muerto
Растаман
 
Сообщения: 3597
Зарегистрирован: Пн окт 11, 2004 19:09
Откуда: Москва


Вернуться в Архив

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

cron