projects/rebirth-ng/src/lib/draggable/draggable.directive.ts
selector | [reDraggable] |
Properties |
Inputs |
Outputs |
HostListeners |
disabled
|
Default value: |
dragData
|
Type: |
dragEffect
|
Type:
Default value: |
reDraggable
|
Type: |
onDragEnd
|
$event type: EventEmitter<any>
|
onDragging
|
$event type: EventEmitter<any>
|
onDragStart
|
$event type: EventEmitter<any>
|
drag |
Arguments : '$event'
|
drag($event: )
|
dragend |
Arguments : '$event'
|
dragend($event: )
|
dragstart |
Arguments : '$event'
|
dragstart($event: )
|
mouseleave |
Arguments : '$event'
|
mouseleave(event: )
|
mouseover |
Arguments : '$event'
|
mouseover(event: )
|
Static DRAGGABLE_DATA_KEY |
DRAGGABLE_DATA_KEY:
|
Type : string
|
Default value : 'text'
|
draggableHandle |
draggableHandle:
|
Type : DraggableHandleDirective
|
Decorators : ContentChild
|
handle |
handle:
|
Type : any
|
import { HostListener, EventEmitter, Output, Input, Directive, ContentChild, ElementRef } from '@angular/core';
@Directive({
selector: '[reDraggableHandle]'
})
export class DraggableHandleDirective {
constructor(public elementRef: ElementRef) {
}
}
@Directive({
selector: '[reDraggable]',
host: {
'[draggable]': '!disabled'
}
})
export class DraggableDirective {
static DRAGGABLE_DATA_KEY = 'text';
@Input() disabled = false;
@Input('reDraggable') group: string;
@Input() dragData: any;
// https://developer.mozilla.org/zh-CN/docs/Web/API/DataTransfer/effectAllowed
@Input() dragEffect: 'none' | 'copy' | 'copyLink' | 'copyMove' | 'link' | 'linkMove' | 'move'
| 'all' | 'uninitialized' = 'copy';
@Output() onDragStart: EventEmitter<any> = new EventEmitter();
@Output() onDragEnd: EventEmitter<any> = new EventEmitter();
@Output() onDragging: EventEmitter<any> = new EventEmitter();
handle: any;
@ContentChild(DraggableHandleDirective) draggableHandle: DraggableHandleDirective;
@HostListener('dragstart', ['$event'])
dragStart($event) {
if (!this.draggableHandle || this.draggableHandle.elementRef.nativeElement === this.handle) {
$event.stopPropagation();
$event.dataTransfer.effectAllowed = this.dragEffect;
$event.dataTransfer.setData(DraggableDirective.DRAGGABLE_DATA_KEY, JSON.stringify({
group: this.group,
data: this.dragData
}));
this.onDragStart.emit($event);
return;
}
$event.preventDefault();
}
@HostListener('drag', ['$event'])
drag($event) {
this.onDragging.emit($event);
}
@HostListener('dragend', ['$event'])
dragEnd($event) {
this.onDragEnd.emit($event);
}
@HostListener('mouseover', ['$event'])
mouseover(event) {
this.handle = event.target;
}
@HostListener('mouseleave', ['$event'])
mouseleave(event) {
this.handle = null;
}
}