E4.08.3list-position restoration on back设计研究

退化时需保留返回列表的位置

别名: 返回定位 · 列表滚动恢复 · 主从返回 · scroll restoration

概念解释

窄屏把主从收成两页之后,列表上下文只能在返回时兑现。返回时恢复列表位置(list-position restoration)要求回到刚才那一段:滚动偏移、选中行、筛选和已加载窗口都还在,而不是把人扔回列表顶端或一个重置过的第一页。退化已经丢掉了余光里的邻条;若连位置也不还,巡检任务每次换条都要从头找起。

机制

位置是外部记忆的坐标。用户记得「刚看的是大约中间那一带」,手指和视线都准备在那一带继续。列表若被卸载再挂载,默认滚动是 0,选中态也可能丢,坐标归零。人会以为数据集变了,或以为自己来错了页。虚拟列表还要复原的是数据窗口而不只是像素偏移:只记了一个数字、窗口却从第一页重拉,中间那一带的对象还没在内存里,会出现空白或错行。筛选、排序若在进详情时被清掉,返回的不单是错位置,而是另一份集合。恢复必须与「这一次列表是谁」绑在一起,而不是全局记一个滚动值套到所有列表上。

怎么研究

在长列表中部打开详情再返回,比较恢复偏移、回到顶端、以及只恢复选中不恢复滚动三种。记录找到下一条的时间、错误地以为列表被刷新的报告、以及空白窗口。自变量:列表是否虚拟化、进详情时列表是否卸载、筛选是否保持。因变量:位置误差(像素或行号)、继续巡检的时间。不要只问「有没有回到列表」,要问「是不是回到刚才那一行附近」。

边界

列表在详情期间被外部事件改写(新消息插到顶端、协作删除了当前行)时,精确像素可能已经无意义,应尽量把原选中行滚回视口;行已删除则落到邻近行并说明原因。搜索结果这种一次性列表,返回时结果集可能过期,恢复位置要连同查询一起,否则坐标对着另一串命中。桌面主从未卸载列表,位置本来就在,这条约束主要在退化栈上发作。

怎么落地

  • 进详情前记下列表标识、滚动偏移或锚点行 id、筛选与排序;返回时按锚点行对齐视口,而不是只 set 一个像素值。
  • 虚拟列表同时恢复数据窗口,避免先画空白再闪到中部。
  • 原行已不存在时滚到最近邻居,并给出短反馈,不要静默回到顶部。
  • 验证:从第 N 行进详情再返回,视口应仍含第 N 行。出现顶部或空白,就查卸载和窗口重建。

延伸

  • 同组E4.08.1 主从视图保持列表上下文 · E4.08.2 窄屏下需退化为前后两页
  • 相邻E4.18 虚拟滚动与长列表 · E5.07 无限滚动
  • 站内检索scroll restoration · back navigation · list position

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/E4.08.3