2012-06-03 4 views
1

다음 코드가 있습니다.jQuery mouseout 및 setTimeout

$("#login").mouseout(function() { 
    setTimeout(function() { 
     $("#login").animate({ 
      height: "toggle" 
     }) 
    }, 500); 
}); 

마우스가 #login을 종료하면 500ms를 기다린 다음 요소를 숨 깁니다. 내가 원하는 것은 마우스가 엘리먼트를 떠나서 500ms 안에 다시 돌아 오면 엘리먼트를 숨길 수 없다는 것입니다. 그렇지 않으면 마우스가 요소의 "범위"에서 500ms 이상 벗어난 경우 애니메이션 기능을 호출하고 요소를 숨 깁니다.

내가 거기에

$("#login").mouseover(function() { 
    clearTimeout(t); 
}); 

를이 코드를 삽입하고 애니메이션이 완료된 후에는 다시 나타납니다 닫을 때 나는 요소 위로 마우스를 취합니다. 당신이 사용할 수 있도록

답변

2

, setTimeout에 대한 변수를 선언 clearTimeout :
(플러스 해결 문제를 "그것은 다시 팝업 것이다")

$("#login") 
    .mouseout(function() { 
     window.t = setTimeout(function() { 
      $("#login").animate({ 
       height: "toggle" 
      }) 
     }, 500); 
    }) 
    .mouseover(function(){ 
     if(window.t){ 
      clearTimeout(window.t); 
      window.t = undefined; 
     }else{ 
      //Do your menu popup thing here 
     } 
    }); 
1

당신은에 시간 제한을 취소 할 수 있습니다 mouseenter 또는 mouseover 이벤트.

var t; 
$("#login").mouseenter(function() { 
    clearTimeout(t); 
}); 
$("#login").mouseout(function() { 
    t = setTimeout(function() { 
     $("#login").animate({ 
      height: "toggle" 
     }) 
    }, 500); 
}); 
+0

끝에 '?'가 무엇입니까? –

+0

어떻게 그곳에 도착했는지 확실하지 않습니다. 내가 그것을 제거하기 위해 게시물을 편집했습니다. – sachleen