使用可滚动的div修复Safari offsetTop

时间:2017-04-04 13:49:07

标签: javascript angular

我有一个可滚动的div,里面有一系列元素。当我使用element.offsetTop时,我在Safari和Chrome / Firefox中获得了不同的长度。

我正在使用angular 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日志:137 x2,137,92 x2,92 x2

Chrome / Firefox日志:92 x2,92 x2,92

我该如何解决?

PD:jQuery解决方案无效。

PD2:我可以使用AfterViewChecked,因为当用户使用滚动时,这个应该有效,所以这个事件应该停止。这就是问题,我不知道这个事件应该如何停止。

1 个答案:

答案 0 :(得分:0)

如果在AngularJS中完成,请尝试聆听$viewContentLoaded

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

    // do what you want to do
});

或者:

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

Or Angular 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);
      });
    });
  }