Ich habe (mit viel Hilfe) die folgende Direktive erstellt, wo ich Y Position eines Bildschirms verfolgen und ein Ereignis mit dieser Information auslösen werde.EventEmitter funktioniert nicht in Chrome/Safari
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);
}
}
und zu versuchen, dieses Ereignis in einer Komponente zu hören:
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);
}
}
wo in der Vorlage dieser Komponente haben wir wie folgt vor:
<nav class="navbar navbar-default navbar-fixed-top top-navbar" track-scroll (pageYPositionChange)="onPageYChange($event)" [ngClass]="{floating: pageY > 10}">
Alles schön in FF arbeitet, aber das ist es, nirgendwo sonst. (versuchte Safari, Chrom)
Was fehlt? Mein einziger Gedanke ist, dass ich die falschen EventEmitter
UPDATE
Offenbar $event.pageY
nicht in Chrom existieren bin mit ... und in der Tat gibt es keine Informationen über die Seitenposition überhaupt. Woher bekomme ich es?
Ist die 'track' Methode wird unter Safari und Chrome genannt? Ich meine, wenn das Scroll-Ereignis in diesen Browsern ausgelöst wird ... –
Versuchen Sie console.logging das $ Event, wenn die Track-Funktion aufgerufen wird. – philoniare
Was ist mit 'document.body.scrollTop' wie in http://stackoverflow.com/a/36468377/217408 gezeigt? –