Обработка нажатия клавиши ctrl при употреблении наркотиков с помощью ng2-dragula

Я разрабатываю приложение Angular с помощью ng2-dragula.

Я хочу сделать копию перетаскиваемого элемента, если на клавиатуре нажата клавиша "Ctrl".

Есть хороший способ справиться с удержанием клавиши Ctrl во время перетаскивания?

Я уже попробовал этот подход:

public constructor(private dragulaService: DragulaService,
                   private renderer2: Renderer2) {
this.keydownListener = this.renderer2.listen('body', 'keydown', (keyboard: KeyboardEvent) => {
    this.isCtrlPressed = keyboard.ctrlKey;
});
this.keydownListener = this.renderer2.listen('body', 'keyup', (keyboard: KeyboardEvent) => {
    this.isCtrlPressed = keyboard.ctrlKey;
});

public ngOnInit(): void {
this.dragulaService.drag.asObservable().pipe(
    takeUntil(this.destroy))
    .subscribe((x) => {
        if (this.isCtrlPressed) {
            // do something
        }
        // do something else }

Но если нажата клавиша "Ctrl", перетаскивание не работает вообще.

Если я (в качестве эксперимента) заменю "Ctrl" на "Shift" или "Alt", это работает, но ужасно медленно.

Есть идеи?

UPD: я также пробовал подходы с @HostListener из angular и fromEvent из rxjs, и во всех случаях это было похоже на ужасное слайд-шоу.

UPD2: проблему с замедлением я решил, переведя слушатель клавиатуры на общий контроль и передавая результат через сервис. Обработка удержания клавиши ctrl все еще остается вопросом.

UPD3: я перешел на Angular материал Drag and Drop: /

0 ответов

Другие вопросы по тегам