在Angular 4应用程序中向下滚动时遇到问题。滚动事件无法被检测到。
标题放在布局组件中,我想要滚动的内容放在路径组件中。那可能是问题吗?
这是我实施的代码。
在layout.component.ts
import { Component, OnInit, HostListener, Inject } from '@angular/core';
import { DOCUMENT } from "@angular/platform-browser";
@Component({
selector: 'app-layout',
templateUrl: './layout.component.html',
styleUrls: ['./layout.component.css']
})
export class LayoutComponent implements OnInit {
public navIsFixed: boolean = false;
constructor(public router: Router, @Inject(DOCUMENT) private document: any) { }
@HostListener('window:scroll', [ ])
onWindowScroll(){
const number = window.pageYOffset ||
document.documentElement.scrollTop ||
document.body.scrollTop || 0;
if (number > 50) {
this.navIsFixed = true;
} else if (this.navIsFixed && number < 10) {
this.navIsFixed = false;
}
}
}
在layout.component.html
中<div [class.fixed]="navIsFixed" class="header">
答案 0 :(得分:2)
我遇到了同样的问题,我所要做的就是确保组件元素实际上是滚动和放大的元素。具有overflow
属性,其值为scroll
或auto
。
否则只是这样:
@HostListener('scroll')
public asd(): void {
console.log('scrolling');
}
答案 1 :(得分:1)
您的布局必须是问题的根源。滚动事件仅在组件模板元素可以实际滚动时才有效。 请参阅我制作的stackblitz。更改div尺寸,不会触发滚动。 为了使其工作,我建议将其设置为指令并设置为高度为100vh且宽度为100vw的div。
从{angular / core&#39;;
导入{Directive,ElementRef,HostListener}@Directive({ selector: '[trackScroll]' })
export class TrackScrollDirective {
constructor(private el: ElementRef) {
}
@HostListener('document:scroll', [])
onScroll(): void {
console.log('I am scrolled');
}
}
<强> stackblitz 强>
答案 2 :(得分:0)
这应该为您提供滚动事件:
@HostListener('scroll', ['$event'])
onScroll(event) {
...
}
或
<div (scroll)="onScroll($event)"
答案 3 :(得分:0)
我有同样的问题,我将其添加到“nav.component”:
@HostListener('window:scroll', [])
onWindowScroll() {
console.log(window.scrollY);
if (window.scrollY > 90) {
this.isSticky = true;
} else {
this.isSticky = false;
}
}