| 
	| 
	
	| 
		
	| 
			
			 
			
				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');
});
 |  |  |  |