Javascript 修复带有可滚动div的Safari offsetTop

Javascript 修复带有可滚动div的Safari offsetTop,javascript,angular,Javascript,Angular,我有一个可滚动的div,里面有一组元素。当我使用element.offsetTop时,我在Safari和Chrome/Firefox中得到了不同的长度 我用的是angular 2 AfterContentInit钩子 ngAfterViewChecked() { this.ticketsService.getData().subscribe(() => { this.zone.onMicrotaskEmpty.first().subscribe(() => {

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

我用的是angular 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);
      });
    });
  }
狩猎日志:137 x2,137,92 x2,92 x2

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

我怎样才能修好它

PD:jQuery解决方案无效


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

如果在AngularJS中完成,请尝试收听以下内容:

或:

或角度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);
      });
    });
  }

这不是问题所在,我在Angular 2 AfterContentChecked事件上执行此操作,我绝对确定已设置属性。您可以在问题中告诉我这是在AngularJS中完成的,而不是否决答案。)不,我用的是Angular 2,这个可以用。XD对angular 2不是100%确定,但请尝试而不是AfterContentChecked()尝试NgaAfterViewInit()
$scope.$watch('$viewContentLoaded', function()
        {
            alert("blah");
        });
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);
      });
    });
  }