2010-05-07 4 views
11

현재 웹 응용 프로그램을 개발 중이며 조금 문제가 있습니다. 나는 ExtJS을 사용하고 있습니다. 그러나 저는 이것이 일반적인 JS 질문이라고 생각합니다.화재 발생시 onmouseout 이벤트 보장

커서가 HTML 요소로 들어가면 커서가 해당 요소를 벗어날 때 onmouseover 이벤트가 발생하고 onmouseout이 트리거됩니다. 여태까지는 그런대로 잘됐다. 불행히도이 동작에 완전히 의존 할 수없는 것 같습니다. 아주 빠른 마우스 움직임으로 인해 이벤트가 실행되지 않을 수 있습니다 (예 : 펜 태블릿으로 커서 위치를 변경하는 경우).

이러한 문제를 해결하는 가장 좋은 방법은 무엇입니까? onmousemove 이벤트를 모두 모니터링하고 커서가 마지막에 있었던 위치를 수동으로 추적하고 적절한 onmouseout 이벤트를 발생시켜야합니까?

답변

3

이것은 일반적인 문제이며, 해결하기 위해 사소한 없습니다. 개별 요소 수준에서 마우스 오버/아웃을 처리하려고 시도하는 것으로 해결하는 것은 기본적으로 불가능합니다. Ext JS를 사용하면 가능한 경우 위임 된 이벤트 처리를 사용하는 것이 일반적이며 마우스 이벤트 모니터링에도 도움이됩니다. 예를 들어 가능한 가장 높은 레벨에서 마우스 오버/아웃을 모니터하고 이벤트 타겟 및/또는 관련 대상 (핸들링 함수로 전달 된 이벤트 객체의 속성)을 검사하여 주어진 이벤트 동안 어떤 요소가 관련되어 있는지 확인합니다. 이것은 나 자신 - 그것은 까다로울 수있다, 그러나 효과적이다). 유스 케이스가 유효한 드래그/드롭 시나리오를 모니터링하고 있다면 DragZone 및 DropZone 클래스가이를 수행하도록 설계되었습니다.

달성하려는 작업에 대한 세부 정보를 입력 할 수 있다면 도움이 될 것입니다.

+0

Ext.dd.DropZone.notifyOver를 덮어 쓰고 놓친 경우 수동으로 mouseout 이벤트를 발생시켜 해결했습니다. 지금까지 오히려 신뢰성있게 작동하는 것 같습니다. – n3rd

3

전에 비슷한 문제가 있었는데 this technique을 사용했습니다. 이것은 펜 태블릿으로 커서 위치를 바꿀 때 도움이되지 않을 수 있습니다. 정상적인 웹 사용자를 타겟팅하는 경우 비정상적인 것으로 생각할 수 있습니다. 그게 효과가 있는지 알려주세요. 그렇지 않다면 더 많이 도울 수 있는지 알게 될 것입니다.

마틴

+0

흠, 재미있는 기사. 나는 이것이 내 질문과 어떻게 관련되는지를 정말로 보지 못한다. 결국, 나는 너무 적지 만 "너무 적은"사건이 일어나고 있습니다. – n3rd

+1

아, 네, 죄송합니다. 오늘 아침 커피를 마시기 전에 그 질문에 대답했습니다. 자신을 굴리지 않으면 이벤트가 시작된다는 것을 보장하는 절대적인 방법은 없습니다. Konerak이 언급 한 것처럼 페이지에 청취자를 추가하고 해고 될 요소를 확인하십시오. onmouseover 메서드에서 현재 요소를 팝하고 onmouseout에서 팝을하면, 어딘가에 잘못되었는지 알 수있는 논리를 작성해야합니다. 우아하지는 않지만 잘 작동해야합니다. 다시, 내 혼란에 대해 죄송합니다 – Martyn