По сути, я хочу добиться того, чтобы прослушать событие «mousemove», прикрепленное к документу, и как только я наведу курсор на элемент, я проверяю, есть ли у него переполненный текст, и если это так, я обрезаю его и добавляю атрибут title к целевому элементу с полным текстом, чтобы когда пользователь наводит на него курсор, браузер показывает всплывающую подсказку по умолчанию с этим текстом.
Эта логика прекрасно работает сама по себе, но у нее есть серьезный недостаток. Это убивает производительность моего приложения, потому что я использую внутри него getComputedStyle().
Чтобы решить эту проблему, я попытался использовать RxJS debounce, и он отлично работает. Но если пользователь быстро перемещает мышь, а затем останавливается, так что для этого элемента возникает только одно событие, тогда всплывающая подсказка добавляется в DOM, но не отображается.
Насколько я понимаю, что происходит с точки зрения браузера, все работает нормально, потому что, когда пользователь навел курсор на элемент, еще не было заголовка, и после его добавления пользователь больше не двигал мышь, поэтому всплывающая подсказка не отображается.
fromEvent(document, 'mouseenter')
.pipe(
debounceTime(20),
tap(($event: Event) => {
this.addTooltip($event);
})
)
.subscribe();
Вопрос в том, знает ли кто-нибудь, как я могу обойти эту проблему?