Не получается setTimeout
Прошу помощи со следующей задачей. Есть горизонтальное меню. Я не хочу чтобы при случайном попадании курсора в область кнопки (либо меню в целом) появлялся дочерний элемент элемент с display:none. Появление элемента реализовано через fadeIn, исчезание fadeOut.
Как сделать таймаут с jquery, чтобы fadeIn и fadeOut срабатывали только если курсор ПРОБУДЕТ заданное время в области кнопки или вне области дочернего элемента соответственно? Вот код: $(document).ready(function(){ $("#mmenu1").mouseenter(function(){ $("#droptab1").fadeIn(150); $("#fon").fadeIn(10); }).mouseleave(function(){ $("#droptab1").fadeOut(150); $("#fon").fadeOut(10); }) }); |
$(document).ready(function(){ var MinTime=1000; function TimeShoWYes () { if(!$("#mmenu1").hasClass('Active')){ $("#mmenu1").addClass('Active') $("#droptab1").fadeIn(150); $("#fon").fadeIn(10); }} function TimeHideYes () { if($("#mmenu1").hasClass('Active')){ $("#mmenu1").removeClass('Active') $("#droptab1").fadeOut(150); $("#fon").fadeOut(10); }} $("#mmenu1").mouseenter(function(){ setTimeout(function() {TimeShoWYes()},MinTime) }).mouseleave(function(){ setTimeout(function() {TimeHideYes()},MinTime) }) }); |
Спасибо огромное!
|
Поправил
|
Попутный вопрос - я решил всю функцию запихнуть в одну, т.к. вкладок меню 7 шт.
Но тут проблема с таймаутом - он один и тот же для всех. Есть какое-то решение этого вопроса или 7 раз прописывать? Пробовал создавать массив и в качестве параметров передавать цыфры - не работает. function menuFirstLast(TimerId_01,TimerId_02,droptab,mmenu_fon,mmenu_fon_r,mmenu_fon_l,mmenu){ var timer=[]; $(mmenu).mouseenter({ clearTimeout(timer[TimerId_02]); timer[TimerId_01]=setTimeout({ $(droptab).fadeIn(300); $(mmenu_fon).fadeIn(100); $(mmenu_fon_r).fadeIn(100); $(mmenu_fon_l).fadeIn(100); },300) }).mouseleave({ clearTimeout(timer[TimerId_01]); timer[TimerId_02]=setTimeout({ $(droptab).fadeOut(100); $(mmenu_fon).fadeOut(100); $(mmenu_fon_r).fadeOut(100); $(mmenu_fon_l).fadeOut(100); },300) }) }; |
deputat333,
При установке Генерить число var Num_TimerID=[];//Глобальные Num_TimerID.push( setTimeout( BB () } ) function BB () { // Тут что-то; } $(mmenu).mouseenter({ for (i=0; i<Num_TimerID.length; i++){ clearTimeout(Num_TimerID[i]); } // ======================== А в принципе и массив не нужен - достаточно одного TimerId - на все действия Если запускается иной - все остальные TimerId уже смысла не имеют и должны стираться - занчит одного - за глаза! |
Не могу разобраться с кодом. Можешь побольше комментариев дописать что куда?
|
deputat333,
Так - пойдёт ? var timer=[]; // function menuFirstLast(TimerId_01,TimerId_02,droptab,mmenu_fon,mmenu_fon_r,mmenu_fon_l,mmenu){ $(mmenu).mouseenter({ clearTimeout(timer[TimerId_02]); timer[TimerId_01]=setTimeout({ $(droptab).fadeIn(300); $(mmenu_fon).fadeIn(100); $(mmenu_fon_r).fadeIn(100); $(mmenu_fon_l).fadeIn(100); },300) }).mouseleave({ clearTimeout(timer[TimerId_01]); timer[TimerId_02]=setTimeout({ $(droptab).fadeOut(100); $(mmenu_fon).fadeOut(100); $(mmenu_fon_r).fadeOut(100); $(mmenu_fon_l).fadeOut(100); },300) }) }; |
Вложений: 1
В том то и дело, что вот так
var timer=[]; function menuFirstLast(TimerId_01,TimerId_02,droptab,mmenu_fon,mmenu_fon_r,mmenu_fon_l,mmenu){ $(mmenu).mouseenter({ clearTimeout(timer[TimerId_02]); timer[TimerId_01]=setTimeout({ $(droptab).fadeIn(300); $(mmenu_fon).fadeIn(100); $(mmenu_fon_r).fadeIn(100); $(mmenu_fon_l).fadeIn(100); },300) }).mouseleave({ clearTimeout(timer[TimerId_01]); timer[TimerId_02]=setTimeout({ $(droptab).fadeOut(100); $(mmenu_fon).fadeOut(100); $(mmenu_fon_r).fadeOut(100); $(mmenu_fon_l).fadeOut(100); },300) }) }; $(document).ready(function(){ menuFirstLast(1,2,'#droptab1','#mmenu1_fon','#mmenu1_fon_r','#mmenu1_fon_l','#mmenu1'); }); не работает. Вот что пишет firebug: |
deputat333,
Поставьте alertы var timer=[]; function menuFirstLast(TimerId_01,TimerId_02,droptab,mmenu_fon,mmenu_fon_r,mmenu_fon_l,mmenu){ $(mmenu).mouseenter({ alert(typeof(TimerId_02)+'='+TimerId_02) clearTimeout(timer[TimerId_02]); timer[TimerId_01]=setTimeout({ $(droptab).fadeIn(300); $(mmenu_fon).fadeIn(100); $(mmenu_fon_r).fadeIn(100); $(mmenu_fon_l).fadeIn(100); },300) }).mouseleave({ alert(typeof(TimerId_01)+'='+TimerId_01) clearTimeout(timer[TimerId_01]); timer[TimerId_02]=setTimeout({ $(droptab).fadeOut(100); $(mmenu_fon).fadeOut(100); $(mmenu_fon_r).fadeOut(100); $(mmenu_fon_l).fadeOut(100); },300) }) }; $(document).ready(function(){ menuFirstLast(1,2,'#droptab1','#mmenu1_fon','#mmenu1_fon_r','#mmenu1_fon_l','#mmenu1'); }); |
Часовой пояс GMT +3, время: 13:22. |