我需要在导航返回后设置列表视图中用户的滚动位置。列表位于一个主项目中。为了检测滚动位置,我使用.win-pivot-item-content
document.querySelector(".win-pivot-item-content").onscroll = function () {
WinJS.Application.sessionState.scrollPosition = this.scrollTop;
};
我使用win-pivot-item-content的滚动位置,因为我的listview的滚动位置总是等于0…
这是一个诡计…但它起作用了。只有当win-pivot-item的大小小于15,000 px(+150个项目)(为什么?!)因为在那之后我的列表加载了2次
listView.winControl.onloadingstatechanged = function () {
// fired twice ..
};
我如何强制我的列表加载内容一次?
编辑:我基于应用程序模板开始了一个新项目,列表视图的滚动位置也等于0。
你的列表不是加载两次,这个事件会在列表加载时触发几次。
如果你想在列表完全加载时做一些事情,你必须检查加载状态:
listView.winControl.onloadingstatechanged = function (args) {
if (ev.detail.loadingState === "complete") {
// The code here will be called only when the list is fully loaded
}
};
本文解释了listview的不同加载状态。
请注意,我的示例显示了如何等待加载结束,但在滚动的情况下,我认为可以在加载列表期间更早地完成(等待结束可能会导致列表滚动时的视觉故障)