V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
kaiki
V2EX  ›  问与答

关于 APP 浏览中加载下一页内容,有没有好的设计方法,不需要用户到达最底部再加载

  •  
  •   kaiki · 2022-01-05 14:24:05 +08:00 · 1611 次点击
    这是一个创建于 1054 天前的主题,其中的信息可能已经有所发展或是发生改变。
    微博的是浏览到一半就会加载出下一页的内容,但是不知道是怎么计算,主要是不知道他继续下滑,第二次加载下一页是在什么时候,每个内容的高度也不固定,那也不能用滚动条高度来计算,有什么好的方法吗?
    19 条回复    2022-01-05 22:03:56 +08:00
    shuxhan
        1
    shuxhan  
       2022-01-05 14:29:07 +08:00
    直接计算当前页面距离底部的距离不行吗,大概 4.5 条数据的样子,然后加载一波,每波放十多条差不多
    kaiki
        2
    kaiki  
    OP
       2022-01-05 14:44:26 +08:00
    @shuxhan 因为不知道每个内容的高度,所以可能出现 10 个内容都很短,或最后一个内容很长,在浏览最后一个内容的时候才能加载
    NexTooo
        3
    NexTooo  
       2022-01-05 14:49:37 +08:00
    测试了下 Android 端的表现,看上去更像是按照 item 的 position 来计算的,因为滑动过程中右侧那个滑动条的高度是动态在变的,上面和下面应该有部分屏幕外的 item 被回收了,但是有一次好几条长微博的时候,滑动条距离底部还有段距离就触发加载更多了
    另外也没有强制说用户一定看不到底部加载栏,稍微滑的快点就有可能在底部看到,并等待一两秒。。
    3dwelcome
        4
    3dwelcome  
       2022-01-05 14:51:52 +08:00
    你可以在需要加载的位置,用一个空的<img onload 来触发下一页加载事件。
    kaiki
        5
    kaiki  
    OP
       2022-01-05 14:53:43 +08:00
    @NexTooo 我就是想让用户体验稍微好一点,提前处理一下加载,也不是强制吧
    没有测试过大量 item 会不会回收,如果回收的话,点击返回顶部那回收的部分不就看不到了吗?
    其实我只是想要一个好点的思路,看看大家的意见。
    kaiki
        6
    kaiki  
    OP
       2022-01-05 14:54:47 +08:00
    就是说在内容中间插入一个 onload 事件,固定滑动到这个部分就会加载是吧,也是个办法。
    NexTooo
        7
    NexTooo  
       2022-01-05 14:58:17 +08:00
    @kaiki 回收不是说销毁了,可能只是固定多个 Item 反复套数据而已。
    那其实按你的设想,做个监听,指定 position 显示在屏幕上的时候,就可以触发下一次的加载更多啦。
    yukiww233
        8
    yukiww233  
       2022-01-05 15:17:11 +08:00
    那就在最后第 n 个 item 可见的回调里请求数据
    vance123
        9
    vance123  
       2022-01-05 15:34:09 +08:00 via Android
    定时检测,滚到 90%就加载
    CommandZi
        10
    CommandZi  
       2022-01-05 16:45:17 +08:00
    剩余内容高度
    GDAN001
        11
    GDAN001  
       2022-01-05 16:58:44 +08:00
    在滚动事件里计算视窗到页面底部的距离就行,要加个节流
    i979491586
        12
    i979491586  
       2022-01-05 17:02:51 +08:00
    每条的高度动态变化的,但是知道目前一共有多少条吧?用户当前屏幕显示到了第几条吧?省下的一切都好解决了
    TomatoYuyuko
        13
    TomatoYuyuko  
       2022-01-05 17:07:06 +08:00
    出现对时间、距离、频率无法把控的情况时,轮询判断是终极答案之一(但未必是最优解
    LLaMA2
        14
    LLaMA2  
       2022-01-05 17:07:14 +08:00
    不知道你是网页是原生 App 。原生 App 是可以知道当前可视区域内 list 中含有的 item 和 item 的相关信息,分页假定是一页 10 条,判断到当前可视的 item 的 index 最大值超过页数*10*0.6 就加载,这样就是说超过 60%就加载。
    关键不是计算高度,而是计算 index
    LLaMA2
        15
    LLaMA2  
       2022-01-05 17:11:42 +08:00
    关于 item 被回收这件事。你应该使用本地缓存。如果特定参数特定页数返回结果一定是一样的话,请求过一次就不应该再请求了,缓存中取
    dcty
        16
    dcty  
       2022-01-05 18:12:28 +08:00
    推荐直接用 list.count - itemIndex == X 来判断就可(渲染 cell 的时候就有 index
    判断高度也不是不可以,scrollview/listview 是可以拿到 contentSize 的(能做到的,至于是否高效或者环保另说),然后在滚动停止或者滚动变化的时候进行判断 contentSize.height - contentOffset.y == Y
    至于你提高的 item 回收,listview 或 tableview 重要的一点就是复用,所以可以不用关心这点。
    另外有提到定时检测的,理论上 listview/scrollview 都有回调位置变化,应该没必要用定时器了(也不是不可以用
    xmuli
        17
    xmuli  
       2022-01-05 19:57:13 +08:00 via iPhone
    永远没有下一页? 无穷无尽很累的
    q503315508
        18
    q503315508  
       2022-01-05 21:05:06 +08:00
    paging3 能预加载吧
    VirgilChen97
        19
    VirgilChen97  
       2022-01-05 22:03:56 +08:00   ❤️ 1
    可不可以搞个占位符,用户滚动不会被卡住,然后异步加载内容。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3624 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 04:47 · PVG 12:47 · LAX 20:47 · JFK 23:47
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.