我有一個帶有用於窄/寬視圖的切換按鈕的側面板。
開啓時,如果滾動條變得可見(溢出),它應該隱藏切換按鈕。事件處理程序中的滾動條可見性檢測
不是直接調用hideOrShowToggleBtn
的,我補充說,我可以在ngAfterViewChecked
用於調用一次每個事件和觀點得到了更新後(希望)私有財產。
但是,如果我切換到縮小視圖和滾動條變得可見 - element.clientHeight element.scrollHeight
是相同的,滾動條未檢測到。
可能是因爲ngAfterViewChecked
過早起火。
會有更好的方法來檢測它,並確保dom是最新的,我沒有檢查滾動條實際添加之前的舊視圖嗎?
@ViewChild('content') private mainContentDiv: ElementRef;
onSidebarToggleClick() {
this.largeSidebar = !this.largeSidebar;
this.sidebarToggled = true;
}
ngAfterViewChecked() {
if (this.sidebarToggled) {
this.hideOrShowToggleBtn();
}
}
hideOrShowToggleBtn() {
let element = this.mainContentDiv.nativeElement;
let style = element.ownerDocument.defaultView.getComputedStyle(element, undefined);
let hasScrollbar = (style.overflowY === 'auto' && element.clientHeight < element.scrollHeight);
this.hideToggle = !hasScrollbar && !this.largeSidebar;
this.sidebarToggled = false;
this.changeDetectorRef.detectChanges();
}
HTML:
<div class="sidebar-header">
<i class="sidebar-header-toggle fa fa-2x cursor"
(click)="onSidebarToggleClick()"
></i>
</div>
<div #content [ngClass]="{'sidebar-large': largeSidebar, 'sidebar-small': !largeSidebar }">
</div>
簡體Plunker: https://plnkr.co/edit/tv2quvCmzElZzidiRjTZ?p=preview