File
Description
The LongPressDirective is a directive that emits an event when the user
holds down on an element for a certain amount of time.
@param longPressTime
(Optional). The time in milliseconds that the user must hold down on the element before triggering the event.
Default is 100ms.
@param appLongPressDo
(Required). The event that will be emitted when the
user holds down on the element.
Example :<div appLongPress [holdTime]="500" (appLongPressDo)="holdHandler(anything)"></div>
Index
Properties
|
|
Inputs
|
|
Outputs
|
|
HostListeners
|
|
longPressTimeout
|
Type : number
|
Default value : 500
|
|
Outputs
appLongPressDo
|
Type : EventEmitter<number>
|
|
The event that will be emitted when the user holds down on the element.
|
HostListeners
mousedown
|
Arguments : '$event'
|
|
mouseleave
|
Arguments : '$event'
|
|
mousemove
|
Arguments : '$event'
|
|
mouseup
|
Arguments : '$event'
|
|
touchcancel
|
Arguments : '$event'
|
|
touchend
|
Arguments : '$event'
|
|
touchmove
|
Arguments : '$event'
|
|
touchstart
|
Arguments : '$event'
|
|
Private
Readonly
handle
|
Default value : new Subject()
|
|
onExit
|
Default value : () => {...}
|
Decorators :
@HostListener('touchend', ['$event']) @HostListener('touchcancel', ['$event']) @HostListener('touchmove', ['$event']) @HostListener('mouseup', ['$event']) @HostListener('mouseleave', ['$event']) @HostListener('mousemove', ['$event'])
|
|
startHold
|
Default value : () => {...}
|
Decorators :
@HostListener('mousedown', ['$event']) @HostListener('touchstart', ['$event'])
|
|
import {
Directive,
HostListener,
EventEmitter,
Output,
Input
} from '@angular/core';
import { interval, Subject } from 'rxjs';
import { take, takeUntil } from 'rxjs/operators';
/**
* The LongPressDirective is a directive that emits an event when the user
* holds down on an element for a certain amount of time.
*
* `@param longPressTime` (Optional). The time in milliseconds that the user must hold down on the element before triggering the event.
* Default is 100ms.
*
* `@param appLongPressDo` (Required). The event that will be emitted when the
* user holds down on the element.
*
* ```javascript
* <div appLongPress [holdTime]="500" (appLongPressDo)="holdHandler(anything)"></div>
* ```
*/
@Directive({
selector: '[appLongPress]',
standalone: true
})
export class LongPressDirective {
@Input() longPressTimeout = 500;
/**
* The event that will be emitted when the user holds down on the element.
* @type {EventEmitter<number>}
*/
@Output() appLongPressDo: EventEmitter<number> = new EventEmitter();
private readonly handle = new Subject();
@HostListener('touchend', ['$event'])
@HostListener('touchcancel', ['$event'])
@HostListener('touchmove', ['$event'])
@HostListener('mouseup', ['$event'])
@HostListener('mouseleave', ['$event'])
@HostListener('mousemove', ['$event'])
onExit = () => this.handle.next(false);
@HostListener('mousedown', ['$event'])
@HostListener('touchstart', ['$event'])
startHold = ($event: any) =>
interval(this.longPressTimeout)
.pipe(take(1), takeUntil(this.handle))
.subscribe(() => this.appLongPressDo.emit($event));
}