redoc/lib/shared/components/PerfectScrollbar/perfect-scrollbar.ts

50 lines
1.1 KiB
TypeScript

import 'perfect-scrollbar/dist/css/perfect-scrollbar.css';
import { Directive, ElementRef, OnDestroy, OnInit } from '@angular/core';
import * as PS from 'perfect-scrollbar';
import { OptionsService } from '../../../services/options.service';
@Directive({
selector: '[perfect-scrollbar]',
})
export class PerfectScrollbar implements OnInit, OnDestroy {
$element: any;
subscription: any;
enabled: boolean = true;
constructor(elementRef: ElementRef, optionsService: OptionsService) {
this.$element = elementRef.nativeElement;
this.enabled = !optionsService.options.nativeScrollbars;
}
update() {
if (!this.enabled) return;
PS.update(this.$element);
}
ngOnInit() {
if (!this.enabled) return;
requestAnimationFrame(() =>
PS.initialize(this.$element, {
wheelSpeed: 2,
handlers: [
'click-rail',
'drag-scrollbar',
'keyboard',
'wheel',
'touch',
],
wheelPropagation: true,
minScrollbarLength: 20,
suppressScrollX: true,
} as any),
);
}
ngOnDestroy() {
if (!this.enabled) return;
PS.destroy(this.$element);
}
}