Событие Keydown происходит постоянно, когда пользователь удерживает кнопку в Chrome. Кажется, это блокирует, так как таймеры глобального установленного rxjs перестают работать во время длительного нажатия клавиш, и обнаружение угловых изменений не меняет представление.
Однако я хочу включить долгое нажатие в моем приложении, чтобы пользователь могбыстро пролистайте нумерацию страниц, и по соображениям удобства использования необходимо, чтобы представление обновлялось всякий раз, когда срабатывает событие нажатия клавиши.
Я пробовал несколько вещей, чтобы добиться этого. Я оборачиваю свои события в наблюдаемые и пытаюсь работать с debounceTime, throttleTime, throttle и audTime.
Я также пытался заставить это работать с vanilla JS Dom-Events без какой-либо бизнес-логики. Что приводит меня к выводу, что это поведение по умолчанию, а также имеет смысл из моих довольно базовых знаний о Eventloop.
Часть моей службы, которая регистрирует прослушиватели событий и возвращает Observable:
return new Observable(observer => {
const callback = (e) => {
e.preventDefault();
observer.next(e);
};
const listenReference = this.eventManager.addEventListener(mBinding.element, event, callback);
return () => {
// kills the actionlistener
listenReference();
this.delteDescription(kbDescription);
};
});
Мой компонент, который регистрирует событие клавиатуры в сервисе и подписывается (здесь я попробовал все виды вещей с помощью throttle и debounce):
this.shortcut.bindShortcut({
key: "ArrowLeft",
description: "Navigate to previous page",
view: "Search Logs View"
}).subscribe(k => {
if (this.page - 1 >= 0) {
this.page -= 1;
this.loadMore(this.page, false);
}
});
Я довольно разочарован этим поведением, так как яне могу получить поведение, которое я хочу. Что бы я ни старался сделать эту вещь менее раздражающей из опыта UX, это не работает так хорошо.
Есть ли у меня какие-либо сведения о том, как это исправить и как на самом деле визуализировать контент без каких-либо прямых манипуляций с dom в функции обратного вызова?
Есть ли способ использовать правильную многопоточность для веб-работников для этого события?