@marcj/angular-desktop-ui
Version:
library offering you desktop UI widgets in Angular 7+
43 lines (36 loc) • 1.23 kB
text/typescript
import {Directive, ElementRef, HostListener, Input, OnInit} from "@angular/core";
import {eachPair} from "@marcj/estdlib";
({
selector: '[duiClassMin]',
})
export class DuiResponsiveDirective implements OnInit {
clazz: { [className: string]: boolean } = {};
protected lastRequest: any;
() duiClassMin: { [className: string]: number } = {};
constructor(
private element: ElementRef,
) {}
ngOnInit() {
this.onResize();
}
('window:resize')
onResize() {
if (this.lastRequest) {
cancelAnimationFrame(this.lastRequest);
}
this.lastRequest = requestAnimationFrame(() => {
const element: HTMLElement = this.element.nativeElement;
for (const [name, number] of eachPair(this.duiClassMin)) {
const valid = element.offsetWidth > number;
if (this.clazz[name] !== valid) {
this.clazz[name] = valid;
if (valid) {
element.classList.add(name);
} else {
element.classList.remove(name);
}
}
}
});
}
}