Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Помогите с динамическим меню! (https://javascript.ru/forum/dom-window/14937-pomogite-s-dinamicheskim-menyu.html)

yupee 06.02.2011 16:13

Помогите с динамическим меню!
 
Недавно начал пробывать себя в программировании, пишу первый сайт, столкнулся с такой проблемой с динамическим меню: охота сделать чтобы при наведении на "кнопку" выпадало меню через полсекунды, но если курсор за эти полсекунды убирают, то меню не выпапло....дык вот, с первым я справился с помощью setTimeout, а вот как отложить setTimeout не могу придумать мучался с clearTimeout но ниче толком не получилось...подскажите пожалуйста как победить этого зверя
Заранее спасибо

dmitriymar 06.02.2011 17:13

а ты посмотри сколько раз setTimeout у тебя в очередь становиться за время что курсор находиться над кнопкой. введи флаг если раз он стал в очередь -то больше не ставить

yupee 06.02.2011 17:26

Спасибо, понял в чем проблема..
Цитата:

Сообщение от dmitriymar
введи флаг если раз он стал в очередь -то больше не ставить

а как это сделать??

dmitriymar 06.02.2011 19:52

у тебя есть событие -онмаусовер
функция вызываемые при событии
var flag=0;
function name()
{
if  (flag!=1){
 setTimeout(.....);
 flag=1;
}

ну а когда выплниться сворачивание меню флаг обнулишь

yupee 07.02.2011 08:58

БОльшое спасибо!!))

yupee 11.02.2011 21:05

Помогите с с динамическим меню)) еще раз)) вобщем проблема такая: работает только первые 2 строчки (после case '1'). при a=2 также ниче не работает((( не пойму в чем дело...$('th#submenu1').mouseover(...) пробывал выносить из условия все равно не работает...помогите пожалуйста!! есть подозрение что ниже этого условия ни одно событие не работает....не знаю в чем проблема
$(document).mousemove( function(){		
switch(a) {
case '1':
$('th#1').mouseover(function(){showSubmenu;});
$('th#1').mouseout(function(){hideSubmenu=setTimeout     ("$('div.submenu#sub1').hide();flagSub=0;",100)});
$('th#submenu1').mouseover(function(){clearTimeout(hideSubmenu);
 submenu.css('background-color','red');
															  })
break;
								
case '2':
$('th#2').mouseover(function(){showSubmenu;})
$('th#2').mouseout(function(){hideSubmenu=setTimeout("$('div.submenu#sub2').hide();flagSub=0",100)})
						break;
						}
							});
});

dmitriymar 11.02.2011 22:16

$('th#1').mouseover(function(){showSubmenu;});
showSubmenu что это вызов какойто доп функции? если да(джиквери не знаю) возможно должно выглядеть как
showSubmenu()?

dmitriymar 11.02.2011 22:23

$(document).mousemove( function(){     
switch(a) {
case '1':
$('th#1').mouseover(function(){showSubmenu;});
$('th#1').mouseout(function(){hideSubmenu=setTimeout     ("$('div.submenu#sub1').hide();flagSub=0;",100)});
$('th#submenu1').mouseover(function(){clearTimeout(hideSubmenu);
 submenu.css('background-color','red');
                                                         })-'это switch(a) закрывается? ну и почему должен второй блок сработать?
break;
                                 
case '2':
$('th#2').mouseover(function(){showSubmenu;})
$('th#2').mouseout(function(){hideSubmenu=setTimeout("$('div.submenu#sub2').hide();flagSub=0",100)})
                        break;
                        }-закрытие switch(a)
                            });-закрытие $(document).mousemove( function(){ 
})-лишняя по идее;

dmitriymar 11.02.2011 22:44

$('th#submenu1').mouseover(function(){clearTimeout (hideSubmenu);
оригинально очищать очередь-если функция выполняется уже то в очереди её уже не будет

yupee 12.02.2011 13:03

dmitriymar не знаю чтобы делал без Вас!! спасибо что возитесь со мной
showSubmenu- переменная объявленная ранее, в ней написана SetTimeout(...,500) (также как и hideSubmenu в этом коде)

$(document).mousemove( function(){		
switch(a) {
case '1':
$('th#1').mouseover(function(){showSubmenu;});
$('th#1').mouseout(function(){hideSubmenu=setTimeout     ("$('div.submenu#sub1').hide();flagSub=0;",100)}); '-если я правельно понял как работает эта функция то здесь она ставится в очередь, пробывал ставить 1секунду, толку мало
$('th#submenu1').mouseover(function(){
clearTimeout(hideSubmenu);               -а при наведении очищается очередь
submenu.css('background-color','red');
})  - здесь закрывается анонимная функция после  $('th#submenu1').mouseover(function(){
break;
								
case '2':
$('th#2').mouseover(function(){showSubmenu;})
$('th#2').mouseout(function(){hideSubmenu=setTimeout("$('div.submenu#sub2').hide();flagSub=0",100)})
						break;
						}
							});
});--точно! лишняя, захватил нечайно


Часовой пояс GMT +3, время: 18:24.