【发布时间】:2016-04-07 09:25:49
【问题描述】:
我创建了(在很多帮助下)以下指令,我在其中跟踪屏幕的 Y 位置并使用此信息触发事件。
import {Directive, Output, EventEmitter} from "angular2/core";
@Directive({
selector: '[track-scroll]',
host: {'(window:scroll)': 'track($event)'},
})
export class TrackScrollDirective {
@Output('pageYPositionChange') pageYPositionChange: EventEmitter<any> = new EventEmitter();
track($event: any) {
this.pageYPositionChange.emit($event.pageY);
}
}
并尝试在组件中监听该事件:
import {TrackScrollDirective} from "../directives/track-scroll.directive";
@Component({
selector: 'app-header',
moduleId: module.id,
templateUrl: './app-header.component.html',
directives: [Collapse, DROPDOWN_DIRECTIVES, ROUTER_DIRECTIVES, TrackScrollDirective]
})
export class AppHeader {
public isCollapsed:boolean = false;
pageY: number = 0;
constructor (
public authService: AuthenticationService
) {}
onPageYChange(pageY: number) {
this.pageY = pageY;
console.debug("PageY Pos ", pageY );
}
}
在该组件的模板中,我们有如下内容:
<nav class="navbar navbar-default navbar-fixed-top top-navbar" track-scroll (pageYPositionChange)="onPageYChange($event)" [ngClass]="{floating: pageY > 10}">
在 FF 中一切都很好,但仅此而已,别无他法。 (尝试过 safari,chrome)
缺少什么?我唯一的想法是我用错了EventEmitter
更新
显然$event.pageY 在 chrome 中不存在...实际上根本没有关于页面位置的信息。我从哪里得到它?
【问题讨论】:
-
在safari和chrome下是否调用了
track方法?我的意思是如果在这些浏览器中触发滚动事件... -
在调用 track 函数时尝试 console.logging $event。
-
如stackoverflow.com/a/36468377/217408 中所示的
document.body.scrollTop怎么样?
标签: google-chrome events safari angular