V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
kaiki
V2EX  ›  问与答

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

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