Я просто хотів чимсь поділитися з вами.
У мене складно було 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()
Я поєднав багато потік подій (миші, миші, ...), але жодна мені не допомогла.
CSS-рішення:
Я знайшов рішення з простим властивістю css, яким я все більше і більше користуюся:
pointer-events: none;
В основному, я використовую його так (у елементах мого списку):
ng-style="{'pointer-events': vm.isHover ? 'none' : ''}"
У цьому хитрому випадку події ng-миші більше не будуть спрацьовувати, і моє плаваюче навігаційне меню більше не закриватиметься, коли курсор над ним та над елементом зі списку.
Щоб піти далі:
Як ви можете очікувати, це рішення працює, але мені це не подобається.
Ми не контролюємо наші події, і це погано.
Крім того, ви повинні мати доступ до vm.isHover
сфери, щоб досягти цього, і це може бути не можливо чи можливо, але певним чином чи іншим чином забруднене.
Я міг би зробити загадку, якщо хтось захоче подивитися.
Тим не менш, у мене немає іншого рішення ...
Це довга історія, і я не можу дати тобі картоплю, тому, будь ласка, прости мене.
У будь-якому випадку, pointer-events: none
це життя, тому пам’ятайте про це.