为什么scrollTop属性的值在angular的setTimeout函数中随机变为最大滚动值

时间:2019-12-02 09:31:32

标签: javascript angular frontend settimeout scrolltop

最近我遇到一个问题,即有角度的子组件通过侦听ngonChanges从父组件接收数据,并通过更改内容设置容器的scrollTop。但是作业需要等到页面渲染完成后才能计算正确的高度。我使用setTimeout包装分配以延迟计算。但是有时候,在我分配之前,scrollTop的值会自动变为最大滚动距离。我不知道为什么有人遇到过这个问题吗?

clearTimeout(this.timeout);
this.timeout = setTimeout(() => {
  this.containerHeight = this.Container.nativeElement.clientHeight;
  this.boxHeight = this.box.nativeElement.clientHeight;
  this.scrollMax = this.boxHeight - this.containerHeight;
  this.tempDom = this.el.nativeElement.querySelector('.item'+ idarray[0]);
  if (this.tempDom) {
    console.log(this.scrollTop);
    this.scrollTop = this.tempDom.offsetTop <= this.scrollMax ? this.tempDom.offsetTop: this.scrollMax;
  }
}, 0);

有时是

  

console.log(this.scrollTop)

结果将变为

  

this.scrollMax

但是没有其他地方可以更改this.scrollTop的值和this.tempDom.offsetTop <= this.scrollMax之前始终为真。

0 个答案:

没有答案