我有一个带有用于窄/宽视图的切换按钮的侧面板。
开启时,如果滚动条变得可见(溢出),它应该隐藏切换按钮。事件处理程序中的滚动条可见性检测
不是直接调用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