Помогите с анимацией выпадающего меню 
		
		
		
		Сделал выпадающее меню с эффектами анимации на javascript.  При наведении курсора мышки блок плавно выезжает, а как сделать что бы при отвода курсора меню сразу же заезжала. При чем не доехавшии до конечной позиции to-500px.  
	
var g=document.getElementById("example");
function hou(){	function delta(progress) {  
    return progress;}
	function delta(progress) {  
    return progress;} 
	var element = document.getElementById("example");
var from = 0; // Начальная координата X
var to = 500; // Конечная координата X
var duration = 1000; // Длительность - 1 секунда
var start = new Date().getTime();// Время старта
setTimeout(function() {
    var now = (new Date().getTime()) - start;// Текущее время
    var progress = now / duration; // Прогресс анимации
    var result = (to - from) * delta(progress) + from;
	element.style.display="block"; 
    element.style.top = result + "px";
    if (progress < 1) // Если анимация не закончилась, продолжаем
        setTimeout(arguments.callee, 10);
}, 10);}
<ul><a href="#" onmouseover="hou()">Меню</a> <ul id="example" > <li >Меню 1</li> <li>Меню 2</li> <li>Меню 3</li></ul></ul>  | 
	
		
 используйте jquery, ибо с ним код сократиться 2 раза: 
	
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"> 
<html> <head>
</head> 
<body> 
<ul><a href="#">Меню</a>
<ul id="example" style="position: relative; height: 0px;">
<li >Меню 1</li>
<li>Меню 2</li>
<li>Меню 3</li></ul></ul>
	<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
	<script type="text/javascript">
var e = $('#example');
$('a').mouseover(function()
	{
	$(e).stop().animate(
		{
		top: 300
		}, 1000);
	}).mouseout(function()
	{
	$(e).stop().animate(
		{
		top: 0
		}, 1000);
	});
	</script>
</body> 
</html>
 | 
	
		
 strengerst, 
	но нужен mouseenter и mouseleave чтобы воспользоваться таким меню 
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  #example{
    position: relative;
  }
  </style>
</head>
<body>
<ul><a href="#"    onmouseover="hou(0)"  onmouseout="hou(-500)" >Меню</a>
<ul id="example" style="top: -500px">
<li >Меню 1</li>
<li>Меню 2</li>
<li>Меню 3</li></ul></ul>
<script>
var g;
function hou(to){
    window.clearTimeout(g)
	function delta(progress) {
    return progress;}
	var element = document.getElementById("example");
var from = parseFloat(element.style.top) ; // Начальная координата X
//var to = to; // Конечная координата X
var duration = 1000; // Длительность - 1 секунда
var start = new Date().getTime();// Время старта
g = setTimeout(function() {
    var now = (new Date().getTime()) - start;// Текущее время
    var progress = now / duration; // Прогресс анимации
    var result = (to - from) * delta(progress) + from;
	element.style.display="block";
    element.style.top = result + "px";
    if (progress < 1) // Если анимация не закончилась, продолжаем
        setTimeout(arguments.callee, 10);
}, 10);}
</script>
</body>
 | 
	
		
 Спасибо большое всем. Буду пробовать.:) Вот первый вариант на jquery то что нужно, но а как такое можно реализовать javascript. то есть что бы уберешь курсор мышки и меню возвращалась с того момента с которого убрал, не доезжая до конца 500px. А допустим убрал в тот момент когда top было 310 и меню от 310 возвращается верх на 0. 
	 | 
	
		
 Цитата: 
	
 - Иметь 2 функции типа "открывает", "закрывает" и 2 переменные для ИД setInterval() - Для открытия "убивать" "закрытие" и запускать "открытие" - Для закрытия "убивать" "открытие" и запускать "закрытие"  | 
	
		
 Цитата: 
	
 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
	<script type="text/javascript">
var e = $('#example'); $(e).css({display:'none'})
$('a').mouseover(function()
	{$(e).stop().animate({top: 300}, 1000); }).css('display','block').mouseout(function(){$(e).stop().animate({
top: 0}, 1000).css('display','none');});
	</script>
Но при таком коде когда уберешь мышку блок сразу становиться невидимым, не успевая вернуться в изначальную позицию. | 
	
		
 strengerst, в animate есть 
	callback — функция, которая будет вызвана после завершения анимации. в неё и добавляйте css.  | 
	
		
 О спасибо попробую. 
	 | 
	
		
 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
	<script type="text/javascript">
var e = $('#example'); $(e).css({display:'none'})
$('a').mouseover(function()
	{$(e).stop().animate({top: 300}, 1000); }).css('display','block').mouseout(function(){$(e).stop().animate({
top: 0}, 1000).callback.css('display','none');});
	</script>
 Так что ли. | 
	
		
 strengerst, 
	Цитата: 
	
  | 
	
		
 strengerst, 
	пример callback в animate  | 
	
		
 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
	<script type="text/javascript">
var e = $('#example'); $(e).css({display:'none'})
$('a').mouseover(function()
	{$(e).stop().animate({top: 300}, 1000); }).css('display','block').mouseout(function(){$(e).stop().animate({
top: 0}, 1000 , callback.css('display','none'))});
	</script>
При такой записи блок исчезает не успев доехать до top 0;Я еще так пытался но тоже нечего не получаеться 
$(document).ready(function(){	
 var callbacks = $.Callbacks();
 callbacks.add(function s (){$(e).css('display','none');})
 var e = $('#example'); $(e).css('opacity',0);
   $('a').mouseover(function(){
   $(e).stop().fadeTo(16,1).animate({top:300}, 1000);})
   $('a').mouseout(function(){  
$(e).stop().animate({top: 0}, 1000).callbacks.fireWith(s);})})
 | 
	
		
 strengerst, 
	посмотрите пример -то $('a').mouseout(function(){ $(e).stop().animate({top: 0}, 1000, function () { $(e).css('opacity',0)// или что вам там надо может $(this).css('display','none') })  | 
	
		
 Спасибо на коннц то получилось просто до меня пока дойдет. 
	 | 
| Часовой пояс GMT +3, время: 18:44. |