Нет события "mousehold
", поэтому я написал одно:
import {
Directive, Input, Output, EventEmitter, HostListener
} from '@angular/core';
@Directive({ selector: '[custMousehold]' })
export class MouseholdDirective {
@Input() duration: number = 350; // ms
@Output() mousehold: EventEmitter<any> = new EventEmitter();
public timeout: NodeJS.Timer;
@HostListener('mousedown', ['$event'])
mousedown(event: MouseEvent) {
if (event.which !== 1) return; // left mouse button only
this.timeout = setTimeout(() => {
this.mousehold.emit(event);
}, this.duration);
}
@HostListener('mouseup')
mouseup() { clearTimeout(this.timeout); }
}
Вот как я прикрепляю его к элементу:
<span custMousehold (mousehold)="do something ...
Это прекрасно работает.Но у меня также есть событие click
для этого же элемента:
<span custMousehold (mousehold)="do something" (click)="do something else ...
И я хочу, чтобы событие click
сработало, только если mousehold
не сработало.Я пробовал с preventDefault()
и stopPropagation()
по всему коду, но они не имеют значения.click
всегда стреляет.