在MdTabGroup中从左到右更改选项卡时,ScrollTop不起作用

时间:2017-06-07 11:30:48

标签: javascript html angular typescript angular-material2

我编写了一个代码,用于保存当前标签主体div的滚动位置,当我们返回该标签时,它将滚动位置设置为存储值。通过登录控制台,我发现存储和检索的值是正确的。但: 当我选择当前活动选项卡右侧的选项卡时,无法设置滚动位置。但是,如果我选择一个位于当前活动标签左侧的标签,则相同的代码会设置div的滚动位置。

预期的行为是什么?

无论标签的位置如何,都应设置滚动位置。代码应该适用于所有情况或不适用。

目前的行为是什么?

当我选择当前活动选项卡右侧的选项卡时,无法设置滚动位置。但是,如果我选择一个位于当前活动标签左侧的标签,则相同的代码会设置div的滚动位置。

要重现的步骤是什么?

Plnkr

export class TabService {

  public scrollPosition: number = [0, 0, 0];
  public currentTab: number = 0;

  public scrollSave() {
    let el = document.getElementById('content');
    // console.log(this.currentTab);
    this.scrollPosition[this.currentTab] = el.scrollTop;
  }

  public setScroll() {
    let el = document.getElementById('content');  
    if (el.scrollTop !== undefined) {
      el.scrollTop = this.scrollPosition[this.currentTab];
    }
  }
}

转到第二个标签。向下滚动到某个位置。转到选项卡3.返回选项卡2.应保存滚动位置。重复相同但转到标签1而不是标签3.滚动位置重置为零。

其他信息:

从selectChange调用该函数甚至不能正确保存滚动位置。这就是我把这个功能放在focusChange中的原因。我在原始代码中有三个函数:一个用于保存滚动位置,一个用于选择要在选项卡切换后显示的内容,另一个用于将滚动位置设置为保存的值。我想通过从selectChange而不是focusChange调用它们来顺序调用这三个函数。并且保存的滚动位置在每种情况下都是正确的。

0 个答案:

没有答案