2017-04-04 2 views
0

Ich habe eine scrollbare div mit einer Sammlung von Elementen im Inneren. Wenn ich element.offsetTop verwende, bekomme ich unterschiedliche Längen in Safari und Chrome/Firefox.Fix Safari OffsetTop mit scrollbaren divs

Ich benutze eckigen 2 AfterContentInit Hook.

ngAfterViewChecked() { 
    this.ticketsService.getData().subscribe(() => { 
     this.zone.onMicrotaskEmpty.first().subscribe(() => { 
     let scrollPosition = calculateElementHeight(this.tickets.toArray()[1].nativeElement); 
     console.log(scrollPosition); 
     this.scrollable.setScrollPosition(scrollPosition); 
     }); 
    }); 
    } 

Safari-Log: 137 x2, 137, 92 x2, 92 x2

Chrome/Firefox-Log: 92 x2, 92 x2, 92

Wie kann ich es beheben?

PD: jQuery-Lösungen sind nicht gültig.

PD2: Ich kann AfterViewChecked verwenden, denn wenn Benutzer die Rolle verwenden, sollte diese Funktion funktionieren, damit das Ereignis beendet wird. Das ist das Problem, ich weiß nicht, wie dieses Ereignis aufhören sollte.

Antwort

0

Wenn in AngularJS getan versuchen zu $viewContentLoaded als solche hören:

$scope.$on('$viewContentLoaded', function(event, args) { 

    // do what you want to do 
}); 

Oder:

$scope.$watch('$viewContentLoaded', function() 
     { 
      alert("blah"); 
     }); 

oder eckig 2:

ngAfterViewInit() { 
    this.ticketsService.getData().subscribe(() => { 
     this.zone.onMicrotaskEmpty.first().subscribe(() => { 
     let scrollPosition = calculateElementHeight(this.tickets.toArray()[1].nativeElement); 
     console.log(scrollPosition); 
     this.scrollable.setScrollPosition(scrollPosition); 
     }); 
    }); 
    } 
+0

Das ist nicht das Problem ist, ich bin Ausführung dieses über Angular 2 AfterContentChecked Ereignis bin ich mir absolut sicher, dass Eigenschaften festgelegt sind. – Serginho

+0

Nun, anstatt die Antwort zu wählen, könntest du in deiner Frage sagen, dass dies in AngularJS gemacht wird;) – TSlegaitis

+0

Nop, ich benutze Angular 2 und das funktioniert ngAfterContentChecked. xD – Serginho