2017-04-04 30 views
0

我有一個可滾動的div,裏面有元素集合。當我使用element.offsetTop時,我在Safari和Chrome/Firefox中獲得了不同的長度。使用可滾動的div修復Safari offsetTop

我正在使用角2 AfterContentInit掛鉤。

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×2,137,92 X2,X2 92

的Chrome/Firefox的日誌:92 X2,X2 92,92

我怎樣才能解決這個問題?

PD:jQuery解決方案無效。

PD2:我可以使用AfterViewChecked,因爲當用戶使用滾動時,這個應該起作用,所以這個事件應該停止。這是問題所在,我不知道這個事件應該如何停止。

回答

0

如果AngularJS做嘗試聽了$viewContentLoaded這樣:

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

    // do what you want to do 
}); 

或者:

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

或角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

這不是問題,我在執行這在Angular 2 AfterContentChecked事件中,我絕對確定屬性已設置。 – Serginho

+0

嗯,而不是投下答案,你可以告訴你的問題,這是在AngularJS中完成的;) – TSlegaitis

+0

Nop,我使用的是Angular 2,這個工作方式是ngAfterContentChecked。 xD – Serginho