以下是一个示例实现:
// holdable.directive.ts
import { Directive, Output, EventEmitter, ElementRef, Renderer2 } from '@angular/core';
@Directive({ selector: '[holdable]' }) export class HoldableDirective {
@Output() hold: EventEmitter
private timeout: any; private interval: number = 500;
constructor(private el: ElementRef, private renderer: Renderer2) { this.renderer.listen(this.el.nativeElement, 'mousedown', (event) => { this.timeout = setTimeout(() => { this.hold.emit(event); }, this.interval); });
this.renderer.listen(this.el.nativeElement, 'click', () => {
clearTimeout(this.timeout);
});
}
}
// app.module.ts
import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser';
import { AppComponent } from './app.component'; import { HoldableDirective } from './holdable.directive';
@NgModule({ declarations: [ AppComponent, HoldableDirective ], imports: [ BrowserModule ], providers: [], bootstrap: [AppComponent] }) export class AppModule { }
// app.component.html
// app.component.ts
import { Component } from '@angular/core';
@Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent {
onHold() { console.log('held down for 500ms'); }
}