import {Directive, ElementRef, HostListener, Input, OnInit} from '@angular/core';
@Directive({
selector: '[seat-dragger]'
})
export class SeatmapDraggerDirective implements OnInit {
private topStart: number;
private leftStart: number;
private _allowDrag: boolean = true;
private md: boolean;
private _handle: HTMLElement;
constructor(public element: ElementRef) {
}
ngOnInit() {
// css changes
if (this._allowDrag) {
this.element.nativeElement.style.position = 'relative';
this.element.nativeElement.className += ' cursor-draggable';
}
}
@HostListener('mousedown', ['$event'])
onMouseDown(event: MouseEvent) {
this.md = true;
this.topStart = event.clientY - this.element.nativeElement.style.top.replace('px', '');
this.leftStart = event.clientX - this.element.nativeElement.style.left.replace('px', '');
}
@HostListener('document:mouseup', ['$event'])
onMouseUp(event: MouseEvent) {
this.md = false;
}
@HostListener('document:mousemove', ['$event'])
onMouseMove(event: MouseEvent) {
if (this.md && this._allowDrag) {
this.element.nativeElement.style.top = (event.clientY - this.topStart) + 'px';
this.element.nativeElement.style.left = (event.clientX - this.leftStart) + 'px';
}
}
@HostListener('document:mouseleave', ['$event'])
onMouseLeave(event: MouseEvent) {
this.md = false;
}
@HostListener('touchstart', ['$event'])
onTouchStart(event: TouchEvent) {
this.md = true;
this.topStart = event.changedTouches[0].clientY - this.element.nativeElement.style.top.replace('px', '');
this.leftStart = event.changedTouches[0].clientX - this.element.nativeElement.style.left.replace('px', '');
event.stopPropagation();
}
@HostListener('document:touchend', ['$event'])
onTouchEnd() {
this.md = false;
}
@HostListener('document:touchmove', ['$event'])
onTouchMove(event: TouchEvent) {
if (this.md && this._allowDrag) {
this.element.nativeElement.style.top = (event.changedTouches[0].clientY - this.topStart) + 'px';
this.element.nativeElement.style.left = (event.changedTouches[0].clientX - this.leftStart) + 'px';
}
event.stopPropagation();
}
@Input('ng2-draggable')
set allowDrag(value: boolean) {
this._allowDrag = value;
if (this._allowDrag)
this.element.nativeElement.className += ' cursor-draggable';
else
this.element.nativeElement.className = this.element.nativeElement.className
.replace(' cursor-draggable', '');
}
@Input()
set ng2DraggableHandle(handle: HTMLElement) {
this._handle = handle;
}
}
Angular拖拽指令
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.