16.07.2012, 21:25
|
Интересующийся
|
|
Регистрация: 16.07.2012
Сообщений: 10
|
|
Не получается 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);
})
});
|
|
16.07.2012, 21:41
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
$(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)
})
});
Последний раз редактировалось Deff, 16.07.2012 в 22:35.
|
|
16.07.2012, 21:49
|
Интересующийся
|
|
Регистрация: 16.07.2012
Сообщений: 10
|
|
Спасибо огромное!
|
|
16.07.2012, 22:21
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
Поправил
|
|
24.07.2012, 01:02
|
Интересующийся
|
|
Регистрация: 16.07.2012
Сообщений: 10
|
|
Попутный вопрос - я решил всю функцию запихнуть в одну, т.к. вкладок меню 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)
})
};
|
|
24.07.2012, 01:25
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
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 уже смысла не имеют и должны стираться - занчит одного - за глаза!
Последний раз редактировалось Deff, 24.07.2012 в 01:44.
|
|
24.07.2012, 14:08
|
Интересующийся
|
|
Регистрация: 16.07.2012
Сообщений: 10
|
|
Не могу разобраться с кодом. Можешь побольше комментариев дописать что куда?
|
|
24.07.2012, 14:18
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
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)
})
};
|
|
24.07.2012, 23:13
|
Интересующийся
|
|
Регистрация: 16.07.2012
Сообщений: 10
|
|
В том то и дело, что вот так
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:
|
|
24.07.2012, 23:19
|
без статуса
|
|
Регистрация: 25.05.2012
Сообщений: 8,219
|
|
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');
});
|
|
|
|