ng-ytl-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
85 lines (69 loc) • 2.79 kB
text/typescript
import { Directive, ElementRef, HostBinding, Input, NgZone, Renderer2 } from '@angular/core';
import { reqAnimFrame } from '../core/polyfill/request-animation';
import { toBoolean } from '../util/convert';
export type NzTabPositionMode = 'horizontal' | 'vertical';
export class NzTabsInkBarDirective {
private _animated = false;
set nzAnimated(value: boolean) {
this._animated = toBoolean(value);
}
get nzAnimated(): boolean {
return this._animated;
}
nzPositionMode: NzTabPositionMode = 'horizontal';
constructor(private _renderer: Renderer2,
private _elementRef: ElementRef,
private _ngZone: NgZone) {
}
alignToElement(element: HTMLElement): void {
this.show();
this._ngZone.runOutsideAngular(() => {
reqAnimFrame(() => {
/** when horizontal remove height style and add transfrom left **/
if (this.nzPositionMode === 'horizontal') {
this._renderer.removeStyle(this._elementRef.nativeElement, 'height');
this._renderer.setStyle(this._elementRef.nativeElement, 'transform',
`translate3d(${this._getLeftPosition(element)}, 0px, 0px)`);
this._renderer.setStyle(this._elementRef.nativeElement, 'width',
this._getElementWidth(element));
} else {
/** when vertical remove width style and add transfrom top **/
this._renderer.removeStyle(this._elementRef.nativeElement, 'width');
this._renderer.setStyle(this._elementRef.nativeElement, 'transform',
`translate3d(0px, ${this._getTopPosition(element)}, 0px)`);
this._renderer.setStyle(this._elementRef.nativeElement, 'height',
this._getElementHeight(element));
}
});
});
}
show(): void {
this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'visible');
}
setDisplay(value: string): void {
this._renderer.setStyle(this._elementRef.nativeElement, 'display', value);
}
hide(): void {
this._renderer.setStyle(this._elementRef.nativeElement, 'visibility', 'hidden');
}
_getLeftPosition(element: HTMLElement): string {
return element ? element.offsetLeft + 'px' : '0';
}
_getElementWidth(element: HTMLElement): string {
return element ? element.offsetWidth + 'px' : '0';
}
_getTopPosition(element: HTMLElement): string {
return element ? element.offsetTop + 'px' : '0';
}
_getElementHeight(element: HTMLElement): string {
return element ? element.offsetHeight + 'px' : '0';
}
}