JavaSсript

Вопросы по программированию
Сообщение
Автор
Аватара пользователя
Angel
Аксакал
Сообщения: 1765
Зарегистрирован: 29 янв 2006 18:06 pm
Репутация: 0
Откуда: Москва

JavaSсript

#1 Сообщение Angel » 03 окт 2006 11:48 am

Кто разбирается?
Ваяю менюху в джаве: горизонтальное меню, при наведении выплывает подменю. Скрипт содержится в отдельном файле.
короче проблема: когда мышь уводишь от меню, то подменю остается. Как сделать чтобы оно убралось?
Вот тело скрипта:

Код: Выделить всё

ns=window.navigator.appName == "Netscape"
ie=window.navigator.appName == "Microsoft Internet Explorer"
function openIt(x) {
if(ns) {
   showbox= document.layers[x+1]
     showbox.visibility = "show"
       showbox.top=44
    var items = 2      
     for (i=1; i<=items; i++) {
      elopen=document.layers[i]
        if (i != (x + 1)) { 
          elopen.visibility = "hide" }
            }
  }    

if(ie) {
   curEl = event.toElement
   showBox = document.all.box[x];
     showBox.style.visibility = "visible";
        showBox.style.top = 180;
         
   var items = 2 
    for (i=0; i<items; i++) {
      elOpen=document.all.box[i]
       barEl=document.all.mnubar[i]
        if (i != x){ 
          elOpen.style.visibility = "hidden" 
       }
     }
   }
}

function closeIt() {
   var items = 2 
     for (i=0; i<items; i++) {
       if(ie){
        document.all.box[i].style.visibility = "hidden"
          barEl=document.all.mnubar[i]
       }
       if(ns){ document.layers[i+1].visibility = "hide"}          
}
}
Не мы такие, жизнь такая... :)

Аватара пользователя
Oleg
Постоянный посетитель
Сообщения: 641
Зарегистрирован: 27 ноя 2005 12:04 pm
Репутация: 0
Откуда: Щёкино, старый город

#2 Сообщение Oleg » 08 окт 2006 18:51 pm

Видимо, совсем плохо с кодерами в городе Щ :( Топик вообще мёртвый :(
Смешная надпись в подписи.

Аватара пользователя
Angel
Аксакал
Сообщения: 1765
Зарегистрирован: 29 янв 2006 18:06 pm
Репутация: 0
Откуда: Москва

#3 Сообщение Angel » 09 окт 2006 08:52 am

М-да... поучил я, кстати, матчасть, можно выйти из положения display:block, но это свойство стия, привязать к проходу мыши так и не получилось.
Не мы такие, жизнь такая... :)

Аватара пользователя
serg-smirnoff
Капитан Корабля
Сообщения: 8626
Зарегистрирован: 07 май 2005 21:17 pm
Репутация: 302

#4 Сообщение serg-smirnoff » 09 окт 2006 16:34 pm

Angel писал(а):М-да... поучил я, кстати, матчасть, можно выйти из положения display:block, но это свойство стия, привязать к проходу мыши так и не получилось.
Свойства мыши будут примерно такие:

Код: Выделить всё

onMouseMove
onMouseOut
onClick
С блоками примерно так:

Код: Выделить всё

display = none; display = block;
visibility = hide; visibility = show;
Cоответственно алгоритм такой

Код: Выделить всё

что-то.там.onMouseOut
{
что-то.там.style.display = 'none';
 или
что-то.там.style.visibility = 'hidden';
}
Разница в том что в одном случае обрабатываешь элемент как inline а в другом как block-level

Как понял я тебе для обьекта подменю надо добавить событие onMouseOut и на это событие повесить функцию которая у тебя убирает меню.

Т.е. ищешь в коде сайта как у тебя подменю сформировано. Тэгами или еще как и добавляешь к тэгу подменю следующую конструкцию

Код: Выделить всё

<DIV onMouseOut="closeIt();"></DIV>
В принципе делал такие меню. Есть готовые решения. Но код другой. Не тот что у тебя.
Последний раз редактировалось serg-smirnoff 09 окт 2006 17:09 pm, всего редактировалось 2 раза.
Государство, приказывающее умирать детворе, всегда назовет себя родиной

Аватара пользователя
Angel
Аксакал
Сообщения: 1765
Зарегистрирован: 29 янв 2006 18:06 pm
Репутация: 0
Откуда: Москва

#5 Сообщение Angel » 09 окт 2006 16:41 pm

Серега, display = none не работает, тупо брал и вставлял к тегу А строку onmouseout="this.style.display='none'" все замечательно, мышь убераешь, подменю пропадает, но после навода нифига не заводится. Надо цикл делать, а у меня руки ни от туда растут.
Не мы такие, жизнь такая... :)

Аватара пользователя
Angel
Аксакал
Сообщения: 1765
Зарегистрирован: 29 янв 2006 18:06 pm
Репутация: 0
Откуда: Москва

#6 Сообщение Angel » 09 окт 2006 16:48 pm

DIV не катит, если в меню, то он переводит все на новую строку, а у меня горизонтальное меню, я использовал SPAN для открытия, т.е.
SPAN openIt(0). А подменю у меня в виде ячейки там я уже засовывал в DIV.
Не мы такие, жизнь такая... :)

Аватара пользователя
serg-smirnoff
Капитан Корабля
Сообщения: 8626
Зарегистрирован: 07 май 2005 21:17 pm
Репутация: 302

#7 Сообщение serg-smirnoff » 09 окт 2006 16:50 pm

Angel писал(а):Серега, display = none не работает, тупо брал и вставлял к тегу А строку onmouseout="this.style.display='none'" все замечательно, мышь убераешь, подменю пропадает, но после навода нифига не заводится. Надо цикл делать, а у меня руки ни от туда растут.
onMouseOut регистр кстати важен.

Что бы заводилось после навода добавляй onMouseMove или лучше onMouseOn и на него вешай не closeIt() а ту функцию что меню открывает. display = 'show' или как там display = 'block'
Государство, приказывающее умирать детворе, всегда назовет себя родиной

Аватара пользователя
Angel
Аксакал
Сообщения: 1765
Зарегистрирован: 29 янв 2006 18:06 pm
Репутация: 0
Откуда: Москва

#8 Сообщение Angel » 09 окт 2006 16:52 pm

Ща попробую. :)
Не мы такие, жизнь такая... :)

Аватара пользователя
Angel
Аксакал
Сообщения: 1765
Зарегистрирован: 29 янв 2006 18:06 pm
Репутация: 0
Откуда: Москва

#9 Сообщение Angel » 11 окт 2006 09:43 am

Не Серег, не катит. Выдавил вот такую конструкцию

Код: Выделить всё

onMouseOut="this.style.visibility = 'hidden'"
и приставил к тегу DIV. Подводишь мышь к меню - вылазит подменю, но когда пытаешься навести на подменю оно естественно скрывается. Короче, нифига не выходит аленький цветочек.
Не мы такие, жизнь такая... :)

Аватара пользователя
serg-smirnoff
Капитан Корабля
Сообщения: 8626
Зарегистрирован: 07 май 2005 21:17 pm
Репутация: 302

#10 Сообщение serg-smirnoff » 11 окт 2006 19:43 pm

там надо смотреть. хочешь кидай скрипты в ЛС
и html и jscript коды. поправлю.
Государство, приказывающее умирать детворе, всегда назовет себя родиной

Аватара пользователя
Alex
Постоянный посетитель
Сообщения: 521
Зарегистрирован: 04 июл 2005 16:14 pm
Репутация: 0
Откуда: Щёкино

#11 Сообщение Alex » 15 окт 2006 10:52 am

Код: Выделить всё

showbox= document.layers[x+1]
Старая конструкция... работает тока в IE... FireFox обругается и правильно сделает... надо через DOM тянуть...[/code]

Аватара пользователя
serg-smirnoff
Капитан Корабля
Сообщения: 8626
Зарегистрирован: 07 май 2005 21:17 pm
Репутация: 302

#12 Сообщение serg-smirnoff » 15 окт 2006 13:25 pm

Alex писал(а):

Код: Выделить всё

showbox= document.layers[x+1]
Старая конструкция... работает тока в IE... FireFox обругается и правильно сделает... надо через DOM тянуть...[/code]
там обычно что-то типа document.getEllementById(id).style используется.

а как в динамической модели к DIV обращаться я уже и не помню. может просто document.div(id).style, а может по другому. надо знать всю структуру последовательно от document. может он в table вложен, который в свою очередь еще в какой-то table вложен, и так далее.
Государство, приказывающее умирать детворе, всегда назовет себя родиной

Аватара пользователя
Alex
Постоянный посетитель
Сообщения: 521
Зарегистрирован: 04 июл 2005 16:14 pm
Репутация: 0
Откуда: Щёкино

#13 Сообщение Alex » 15 окт 2006 13:45 pm

По id...

Код: Выделить всё

el = document.getElementById(id);
el.style = bla bla bla;

bla bla bla

надо знать всю структуру последовательно от document
Структура не нужна... зачем?

з.ы. Серёг, ты ща где нить работаешь? К нам вроде требуются есчё пехапихеры...

Аватара пользователя
Angel
Аксакал
Сообщения: 1765
Зарегистрирован: 29 янв 2006 18:06 pm
Репутация: 0
Откуда: Москва

#14 Сообщение Angel » 16 окт 2006 09:22 am

Вы куда-то не туда зашли. Мне PHP нах не нужен, т.к. не шарю я в нем ни капли.
Серега, я тебе щас кину файлики, глянешь? Буду признателен - отплачу пивом!
Не мы такие, жизнь такая... :)

Аватара пользователя
serg-smirnoff
Капитан Корабля
Сообщения: 8626
Зарегистрирован: 07 май 2005 21:17 pm
Репутация: 302

#15 Сообщение serg-smirnoff » 16 окт 2006 18:50 pm

Alex писал(а):По id...

Код: Выделить всё

el = document.getElementById(id);
el.style = bla bla bla;

bla bla bla

надо знать всю структуру последовательно от document
Структура не нужна... зачем?
А если бы задача стояла цеплять не по ID а просто. Типа

Код: Выделить всё

document.forms["1"].input.style
тогда как обратиться к DIV не зная какой у него ID? Например подцепить DIV вложенный в какую-то таблиц по ID таблицы...

Код: Выделить всё

з.ы. Серёг, ты ща где нить работаешь? К нам вроде требуются есчё пехапихеры...[/quote]

[b]offtopic - begin[/b]
На текущий момент времени моя работа связана с заправкой лазерных принтеров и комплексным профилактическим обслуживанием всякого рода компьютеров. Короче эникейщик. Программистом не буду работать. Как-то не по мне. И фиговый из меня программист если честно. Если вашей конторе нужен html-кодер, который будет заниматься версткой сайтов за деньги, то я готов рассмотреть предложение. Но опять же подозреваю, что то что предложат мне не подойдет.
[b]offtopic - end[/b]

[b]To Angel[/b]: Мы не о [b]php[/b], мы о объектной модели документа. И он прав, т.к. конструкция обращения к слоям через массив layers использовалась во времена NN4. Сейчас все через DOM (Dynamic Object Model), для того что бы начать работать с элементом цепляешь его по ID используя метод getEllementById(), а дальше последовательно через свойства эллемента присваиваешь определенные значения. Скрыть, показать и т.д.

Коды кидай, на днях гляну.
Вложения
выпадающее меню на jscript.zip
Вот пример выпадающего меню для одного пункта. Тут http://gyroscope-v.narod.ru/ есть работающие меню такого типа
(6.29 КБ) 106 скачиваний
Государство, приказывающее умирать детворе, всегда назовет себя родиной

Ответить