Sadece seninle bir şeyler paylaşmak istedim. Ve olaylarla
biraz zorlandım . ng-mouseenter
ng-mouseleave
Vaka çalışması:
İmleç bir simgenin üzerinde olduğunda geçiş yapan kayan bir gezinme menüsü oluşturdum.
Bu menü her sayfanın üstündeydi.
- Menüde show / hide işlemek için bir sınıfı değiştiririm.
ng-class="{down: vm.isHover}"
- Vm.isHover öğesini değiştirmek için, ng fare olaylarını kullanıyorum.
ng-mouseenter="vm.isHover = true"
ng-mouseleave="vm.isHover = false"
Şimdilik, her şey iyiydi ve beklendiği gibi çalıştı.
Çözüm temiz ve basittir.
Gelen sorun:
Belirli bir görünümde, elemanların bir listesi var.
İmleç listenin bir öğesinin üzerindeyken bir eylem paneli ekledim.
Davranışı işlemek için yukarıdaki ile aynı kodu kullandım.
Sorun:
İmlecim kayan gezinme menüsünde ve ayrıca bir öğenin üstünde olduğunda, aralarında bir çakışma olduğunu anladım.
Eylem paneli belirdi ve kayan gezinme gizlendi.
Mesele imleç kayan gezinme menüsünün üzerinde olsa bile, ng-mouseenter liste öğesinin tetiklenmesidir.
Benim için hiçbir anlam ifade etmiyor, çünkü fare yayılma olaylarının otomatik olarak kesilmesini beklerdim.
Hayal kırıklığına uğradım ve bu sorunu bulmak için biraz zaman harcadığımı söylemeliyim.
İlk düşünceler:
Bunları kullanmaya çalıştım:
$event.stopPropagation()
$event.stopImmediatePropagation()
İşaretçi olaylarının birçoğunu birleştirdim (fareyle üzerine gelme, mouveover, ...) ama hiçbiri bana yardım etmedi.
CSS çözümü:
Çözümü daha fazla kullandığım basit bir css özelliği ile buldum:
pointer-events: none;
Temel olarak, (liste öğelerimde) şöyle kullanıyorum:
ng-style="{'pointer-events': vm.isHover ? 'none' : ''}"
Bu aldatıcı olayla, ng-fare olayları artık tetiklenmeyecek ve imleç üzerinde olduğunda ve listedeki bir öğenin üzerinde olduğunda kayan gezinme menüm artık kendini kapatmayacak.
Daha ileri gitmek için:
Tahmin edebileceğiniz gibi, bu çözüm işe yarıyor ama hoşuma gitmiyor.
Olaylarımızı kontrol etmiyoruz ve bu kötü.
Ayrıca, bunu vm.isHover
başarmak için kapsama erişiminiz olmalıdır ve bu mümkün veya mümkün olmayabilir, ancak bir şekilde kirli olabilir.
Birisi bakmak isterse keman yapabilirim.
Yine de, başka bir çözümüm yok ...
Uzun bir hikaye ve sana patates veremem bu yüzden lütfen beni affet arkadaşım.
Her neyse, pointer-events: none
hayat bu yüzden hatırla.