2009-12-07 3 views
11

나는 마우스가 다음과 같은 시나리오의 요소를 통해하면 계속 감지 할 수 있도록하고 싶습니다 :jQuery : 요소 위에 마우스가 여전히 있습니까?

  1. 마우스 오버 후 몇 초 동안 잠을합니다.
  2. 일단 완료되면 마우스의 수면 검사가 여전히 동일한 요소 위에 있습니다.
  3. 사실이면 뭔가를하십시오.

어떻게 2 위를 달성 할 수 있습니까?

감사합니다. 당신이 요소에 .hover()를 설정하면

, 당신은 그것을이 개 기능을 전달할 수 있습니다

+0

"잠"중에 무엇을하고 있습니까? – PetersenDidIt

+1

petersendidit : 아무 것도 없습니다. 시간 초과입니다. – thedp

+0

타임 아웃시 마우스가 "다시 같은 요소 위에"있다면 어떻게해야합니까? 그러한 요소는 "여전히 동일한 요소를 넘었다"고 생각합니까? –

답변

15

jQuery 용 hoverIntent 플러그인을 살펴보십시오. 일정 시간 동안 요소 위에 마우스를 가져간 경우에만 실행되는 새 이벤트 핸들러를 제공합니다. 옵션을 조정하면 원하는대로 정확하게 할 수 있습니다.

+1

+1 유용한 플러그인 – alex

+0

이 플러그인을 좋아합니다! 정말 고마워요. – thedp

+0

hoverIntent와 유사한 플러그인이 http://blog.threedubmedia.com/2008/08/eventspecialhover.html에 있습니다. 필요한 플러그인에 따라 달라집니다. 둘 다 테스트 할 가치가 있습니다. – Nooshu

2

여기에 하나의 방법입니다. 마우스가 요소 위에있을 때 첫 번째 요소가 시작되고 마우스가 밖으로 나갈 때 두 번째 요소가 시작됩니다.

첫 번째 기능은 currentElementId (또는 다른 플래그)을 설정할 수 있으며 두 번째 기능은이를 지울 수 있습니다. 이 방법은 currentElementId이 비어 있는지 확인하는 것입니다.

+0

요소에 포커스가없는 경우 실제로 currentElementId를 가져올 수 있습니까? 마우스를 위로 움직여야합니까? – thedp

+1

u 님은 어떤 이벤트에 대해서도 그 id를 설정할 수 있습니다. 여기에서 FOCUS()를 사용하십시오 : http://docs.jquery.com/Events/focus –

1

setTimeout('sleep', sleep_time)을 사용하면 설정된 시간 후에 함수를 호출 할 수 있습니다.

onmouseover 및 onmouseout에 이벤트 처리기를 할당하십시오.

이 핸들러는 마우스가 아직 요소에 있는지 확인하기 위해 플래그를 수정합니다.

잠자기 기능의 내부에서 깃발을 확인하고 돌려받을 수 있습니다.

+2

한 가지주의 할 점은, onmouseover 이벤트는 마우스가 실제로 움직입니다. 사용자의 마우스가 정지되었지만 요소 위에 있으면 트리거되지 않습니다.내가 틀렸다면 나를 바로 잡아라. – donut

+0

거의 100 % 정확합니다! 이것이 제가 질문하는 이유입니다. 2 레벨의 마우스 오버 및 마우스 오버를 사용하여 게임을 시도했지만 방금 말한 것을 주목했습니다. mouseover 이벤트는 최상위 레벨에서만 실행됩니다. 그리고 요소에서 마우스를 옮긴 다음 돌아 오지 않으면 이벤트가 다시 시작되지 않습니다. 여기에서 가장 중요한 질문은이 성가신 문제를 어떻게 해결할 수 있습니까? – thedp

10

깃발을 사용하여 마우스가 위에 있는지 여부를 알려줍니다.

var mouseover = false; 
$('.thing').mouseenter(function(){ 
    mouseover = true; 
}).mouseleave(function(){ 
    mouseover = false; 
}); 
+0

나는 꽤 많이 말했다. –

+0

여전히 가난한 시도에서 가지고있는 것과 같은 문제가 있습니다. 타임 아웃 후에도 마우스가 계속 남아 있는지 여부를 알 수 있어야합니다. 그러면 요소를 넘지 않으면 아무 것도하지 않아도됩니다. – thedp

+0

if (mouseover) {// 다음 마우스가 항목 위에 있다는 것을 알리는 것을하십시오} – PetersenDidIt

37

이것은 (http://jsbin.com/uvoqe)

$("#hello").hover(function() { 
    $(this).data('timeout', setTimeout(function() { 

    alert('You have been hovering this element for 1000ms'); 

    }, 1000)); 
}, function() { 

    clearTimeout($(this).data('timeout')); 

}); 
+6

이것은 실제로 –

+0

영리한 해결책을 사용하는 것보다 영리하고/명확한 방법입니다. –

+1

화려한. 슬라이드 쇼 메뉴가 너무 빨리 닫히지 않도록 unhover 이벤트를 지연시키기 위해 "언 휴 오버"기능에 두 번째 시간 초과를 추가 할 수도 있습니다. – pbarney

1
나는 최대한 빨리 이동으로 div 다음 hover 이벤트에 나는이의 제한 시간 속성을 설정하고 보여 하이퍼 링크를 사용

을 작동하는 것 같다 내 div 내가 지우 시간 제한을 설정하고 divhover 기능을 사용하여 div을 페이드 아웃하십시오. 이게 당신을 도울 수 있기를 바랍니다.

<script type="text/javascript"> 
    $(document).ready(function() { 
     var obj; 
     $("a").hover(function() { 
      if ($("#div1").is(":hidden")) { 
       $("#div1").fadeIn(300).show(); 
      } 
     }, function() { 
      obj = setTimeout("jQuery('#div1').fadeOut(300);", 300); 
     }); 

     $("#div1").hover(function() { 
      clearTimeout(obj); 
      if ($("#div1").is(":hidden")) { 

       $("#div1").show(); 
      } 
     }, function() { 
      jQuery('#div1').fadeOut(300); 
     }); 
    }); 
</script> 
관련 문제