Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   непонятное событие (https://javascript.ru/forum/events/34173-neponyatnoe-sobytie.html)

zlodiak 22.12.2012 23:05

непонятное событие
 
помогите пожалуйста понять почему на этой странице происходит событие onmouseout при перемещении курсора по пунктам меню. в результате меню схлопывается(схлопывание по задумке должно происходить только когда курсор покидает область меню)

вот js-код

var menu = document.getElementById('left_menu');
			var content = document.getElementById('content');
			var running = false;
			
			menu.style.left = '-200px';
			
			//
			if (document.addEventListener) {
				addEvent = function(el, type, handler) {
					el.addEventListener(type, handler, false)
				};
			} else {
				addEvent = function(el, type, handler) {
					el.attachEvent("on" + type, handler)
				};
			};
			
			//анимация левого меню - начало
			addEvent(menu, "mouseover", function(e) {
					if(this.style.left == '-200px'){
						var element = this;
						var from = -200; // Начальная координата X
						var to = 0; // Конечная координата X
						var duration = 1000; // Длительность 
						var start = new Date().getTime(); // Время старта
						
					if(running != true){
						running = true;		

							setTimeout(function() {					
								var now = (new Date().getTime()) - start; // Текущее время
								var progress = now / duration; // Прогресс анимации

								var result = (Math.round((to - from) * delta(progress>1?1:progress)) + from);

								element.style.left = result + "px";

								if (progress < 1) // Если анимация не закончилась, продолжаем
									setTimeout(arguments.callee, 10);
							}, 10);
						
							running = false;
						}
					}
			});
			
			addEvent(menu, "mouseout", function(e) {
				if(this.style.left == '0px'){
					var element = this;
					var from = 0; // Начальная координата X
					var to = -200; // Конечная координата X
					var duration = 1000; // Длительность 
					var start = new Date().getTime(); // Время старта
					
					if(running != true){
						running = true;					

						setTimeout(function() {					
							var now = (new Date().getTime()) - start; 
							var progress = now / duration; 

							var result = (Math.round((to - from) * delta(progress>1?1:progress)) + from);

							element.style.left = result + "px";

							if (progress < 1) 
								setTimeout(arguments.callee, 10);
						}, 10);
						
						running = false;
					}						
				}
			});		

			function delta(progress) {
				 function d(progress) {
					for(var a = 0, b = 1, result; 1; a += b, b /= 2) {
					   if (progress >= (7 - 4 * a) / 11)
						   return -Math.pow((11 - 6 * a - 11 * progress) / 4, 2) + Math.pow(b, 2);
					}
				 }
				 return 1 - d(1 - progress);
			}			
			//анимация левого меню - конец

cyber 23.12.2012 02:30

zlodiak,
вот воспользуйтесь
function hover (opt) {
	
 opt.elem.onmouseover = ElemMouseAction;	 
 opt.elem.onmouseout = ElemMouseAction;
 	
 function ElemMouseAction (evt) {
  var related, Call;
  var e = evt || event;	 
 
	if(e.type == 'mouseover'){  
	  Call = opt.over; 
	  related = e.relatedTarget || e.fromElement;
	  
	} else {
	  Call = opt.out; 
	  related =  e.relatedTarget || e.toElement;
	  
		}
		
			
	while (related && related != this) {
		related = related.parentNode;
		} 
	  
	  if(related == this) return;
	 
	  Call();
	 
	 }	

	
	}
	
hover({
	elem:document.getElementById('#bla'),
	over:function () {// срабатывает при mouseover
		
		},
	out:function (){// срабатывает при mouseout
		
		}	
	
	});


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