2015-01-25 10 views
1

은 내가 GWT MouseHandler는 이벤트에 문제가 내가 만약 angel를 사용하고GWT MouseOverHandler 및 MouseOutHandler가 끔찍한 결과를 가져 오므로 요소가 동시에 마우스를 놓고 마우스를 끈 상태로 유지됩니까?</p> <p>이 코드 :

@Override 
    protected void extend(ServerConnector target) { 
     final Widget widget = ((ComponentConnector) target).getWidget(); 

     widget.addDomHandler(new MouseOverHandler() { 
      @Override 
      public void onMouseOver(MouseOverEvent e) { 
       widget.setVisible(false); 
      } 
     }, MouseOverEvent.getType()); 

     widget.addDomHandler(new MouseOutHandler() { 

      @Override 
      public void onMouseOut(MouseOutEvent event) { 
       widget.setVisible(true); 
      } 
     }, MouseOutEvent.getType()); 
    } 

, 이것은 확장 커넥터 안에 있습니다. 올려 놓은 요소는 단순한 레이블입니다. 내가 하나가 단지 MouseOverHandler 또는에서는 mouseOutHandler를 사용하면 모든 것이 잘 작동하지만, 내가 함께 사용할 때 나는 (무슨 뜻인지 이해하기 위해 비디오에서 봐 주시기 바랍니다)이 끔찍한 결과를 얻을 :

http://tinypic.com/player.php?v=jrxpq0%3E&s=8#.VMSkFnCUc4Q

MouseOverHandler와 MouseOutHandler가 함께 사용하는 이유는 무엇입니까?

답변

1

gwt와는 아무런 관련이 없습니다. 마우스가 위에있을 때 위젯을 숨기고 있습니다. 요소가 숨겨지면 마우스가 더 이상 끝나지 않으므로 mouseOut 이벤트가 트리거되어 위젯이 다시 표시됩니다. 그러면 mouseOver 이벤트가 다시 트리거되고 루프가 다시 시작됩니다.

그것은 기본적으로 이것이다 :

<div onMouseOver="this.style='visibility:hidden;'" onMouseOut="this.style=''">blub</div> 

또는 jsfiddle에

은 놀러 : http://jsfiddle.net/9cwsqca4/

+0

예, 나는 당신이 무슨 뜻인지 이해했다. 그러나'widget.addStyleName()'을 사용하여 CSS 클래스에'visibility : hidden'을 추가하고 마우스로 제거하려고 시도했습니다. 그리고 아름다움은 여전히이 "루프"를 경험한다는 것입니다. 왜 그런가요? – tonix

+1

표시 여부를 숨김으로 설정하면 요소가 숨겨지고 전에 요소 위에 있었던 마우스가 더 이상 요소 위에 있지 않습니다. 즉, 마우스가 요소에서 빠져 나와 onMouseOut 이벤트가 트리거되어야합니다. 직접 또는 CSS 클래스에 의해'visibility : hidden '을 설정하는 것은 중요하지 않습니다. 너 뭐하려고? 마우스가 위에있는 동안 뭔가를 숨기려면 이벤트를 주변 div에 첨부해야합니다. http://jsfiddle.net/1bu2e00r/2/ – raffael

+0

http://jsfiddle.net/1bu2e00r/3/도 파이어 폭스 이외의 다른 브라우저에서 작동합니다 (적어도 크롬, 테스터 IE는 없음) – raffael