我编写了一个代码,用于保存当前标签主体div的滚动位置,当我们返回该标签时,它将滚动位置设置为存储值。通过登录控制台,我发现存储和检索的值是正确的。但: 当我选择当前活动选项卡右侧的选项卡时,无法设置滚动位置。但是,如果我选择一个位于当前活动标签左侧的标签,则相同的代码会设置div的滚动位置。
预期的行为是什么?
无论标签的位置如何,都应设置滚动位置。代码应该适用于所有情况或不适用。
目前的行为是什么?
当我选择当前活动选项卡右侧的选项卡时,无法设置滚动位置。但是,如果我选择一个位于当前活动标签左侧的标签,则相同的代码会设置div的滚动位置。
要重现的步骤是什么?
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调用它们来顺序调用这三个函数。并且保存的滚动位置在每种情况下都是正确的。