kaiki
V2EX  ›  问与答

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

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