난 그냥 당신과 뭔가를 공유하고 싶었다.
나는 몇 가지 어려움을 가지고 ng-mouseenter
및 ng-mouseleave
이벤트.
사례 연구 :
커서가 아이콘 위에있을 때 토글되는 부동 탐색 메뉴를 만들었습니다.
이 메뉴는 각 페이지의 상단에있었습니다.
- 메뉴에서 표시 / 숨기기를 처리하기 위해 클래스를 토글합니다.
ng-class="{down: vm.isHover}"
- vm.isHover 를 토글 하기 위해 ng 마우스 이벤트를 사용합니다.
ng-mouseenter="vm.isHover = true"
ng-mouseleave="vm.isHover = false"
현재로서는 모든 것이 정상이며 예상대로 작동했습니다.
해결책은 깨끗하고 간단합니다.
들어오는 문제 :
특정보기에는 요소 목록이 있습니다.
커서가 목록의 요소 위에있을 때 액션 패널을 추가했습니다.
위와 동일한 코드를 사용하여 동작을 처리했습니다.
문제 :
커서가 떠 다니는 탐색 메뉴와 요소의 맨 위에있을 때 서로 충돌하는 것을 알았습니다.
액션 패널이 나타나고 플로팅 네비게이션이 숨겨졌습니다.
커서가 부동 탐색 메뉴 위에 있어도 목록 요소 ng-mouseenter가 트리거됩니다.
마우스 전파 이벤트가 자동으로 중단 될 것으로 예상되므로 이해가되지 않습니다.
나는 실망했다고 말해야하며 그 문제를 찾기 위해 시간을 보냅니다.
첫 생각 :
나는 이것을 사용하려고했다.
$event.stopPropagation()
$event.stopImmediatePropagation()
나는 많은 ng 포인터 이벤트 (mousemove, mouveover, ...)를 결합했지만 아무도 나를 도와주지 않습니다.
CSS 솔루션 :
점점 더 많이 사용하는 간단한 CSS 속성이있는 솔루션을 찾았습니다.
pointer-events: none;
기본적으로 나는 (목록 요소에서) 다음과 같이 사용합니다.
ng-style="{'pointer-events': vm.isHover ? 'none' : ''}"
이 까다로운 이벤트를 사용하면 커서가 ng-mouse 이벤트가 더 이상 트리거되지 않고 커서가 목록 위에 있고 요소 위에 있으면 부동 탐색 메뉴가 더 이상 닫히지 않습니다.
더 나아가려면 :
예상 대로이 솔루션은 작동하지만 마음에 들지 않습니다.
우리는 이벤트를 통제하지 않으며 나쁘다.
또한이 vm.isHover
를 달성 하려면 범위에 액세스 할 수 있어야 하며 가능하거나 불가능하지는 않지만 어떤 식 으로든 더러워 질 수 있습니다.
누군가보고 싶다면 바이올린을 만들 수 있습니다.
그럼에도 불구하고, 나는 다른 해결책이 없습니다 ...
그것은 긴 이야기이며 감자를 줄 수 없으므로 친구를 용서하십시오.
어쨌든 pointer-events: none
인생 이니 기억하세요