前端的等待加载界面,有什么防止闪烁的好办法吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Richard14
V2EX    问与答

前端的等待加载界面,有什么防止闪烁的好办法吗?

  •  
  •   Richard14 2022-08-06 07:07:43 +08:00 2756 次点击
    这是一个创建于 1166 天前的主题,其中的信息可能已经有所发展或是发生改变。

    业务上后端要若干秒给前端准备资源,然后网页才能使用。希望达到的效果是,前端请求 html 页面里本身就包含了这个 loading 界面,它的成本很低,可以直接播放载入动画。

    然后等到页面实际上具备功能了,标志事件可能是某资源加载成功,或者某请求的回文中得到了确认。这时候就把 loading 界面消去。目前一个问题是如果默认首屏显示 loading 的话,后端有时候资源有缓存,可以瞬间确认可以使用的状态,这时候前端的 loading 就会闪烁后消失,看起来非常 low (并且通常 loading 为了不做的太硬,会加一些渐变消失动画之类的,导致消失的过程也挺明显的。。)

    大家有啥好办法解决类似情况吗

    14 条回复    2022-08-08 09:10:13 +08:00
    kkocdko
        1
    kkocdko  
       2022-08-06 07:50:26 +08:00 via Android
    先白屏,过一段时间没加载完成再显示 loading ?
    ktqFDx9m2Bvfq3y4
        2
    ktqFDx9m2Bvfq3y4  
       2022-08-06 07:55:14 +08:00 via iPhone
    关闭 loading 前判断一下时间,不够时间就拖一会儿再关。比如至少 0.5 秒。
    Richard14
        3
    Richard14  
    OP
       2022-08-06 08:23:48 +08:00
    @Chad0000 所以从闪一下改为一直显示吗。。是我没想到的思路。。
    christin
        4
    christin  
       2022-08-06 08:32:14 +08:00 via iPhone
    promise.all 全部成功了再取消 loading
    ktqFDx9m2Bvfq3y4
        5
    ktqFDx9m2Bvfq3y4  
       2022-08-06 08:35:53 +08:00
    @Richard14
    对。人为造成加载需要一定时间的假象。
    noahhhh
        6
    noahhhh  
       2022-08-06 08:36:36 +08:00 via Android
    加个透明度变化的遮罩?
    ragnaroks
        7
    ragnaroks  
       2022-08-06 08:38:46 +08:00
    要么延迟显示,国外网站常见,处于加载过程中一定时间之后才显示加载动画;要么默认显示并给一个最低显示时间,可以在 onLoad 中 setTimeout
    yaojin
        8
    yaojin  
       2022-08-06 09:49:19 +08:00   2
    一共 3 个 promise 运行, 一个 promise 是最低的等待时间, 超过这个时间返回失败的 promise, 例如 100 毫秒, 另一个是你请求的 promise, 还有一个 promise 是最长时间等待 promise, 用 promise.race 让请求 promise 和最低时间 promise 抢跑, 如果请求少于最低时长,那也需要最低时长才能成功, 否则 catch 再 promise.all 让最长和请求都完成才返回成功, 这样就不会有出现闪烁的情况了, 而且也保证了最低时长和请求刚好大于 1 毫秒的尴尬局面
    LLaMA2
        9
    LLaMA2  
       2022-08-06 11:50:54 +08:00
    1 、loading 的动画样式很重要,早期苹果那种菊花个人不喜欢,现在很多 App 的自定义动画很和谐,
    2 、2 楼说的进如页面显示,结束请求 fade out 你要实现后看看能否满足
    3 、我以前做的时候是进入页面就显示 Loading ,不过这个 Loading 是 Fade in 的,而且前 0.2S 左右是透明的,0.2S 后才慢慢显现出来,如果从 cache 取,0.2S 内完成,直接 dismiss ,不做 Fade out 。这样给人的感觉是没有 Loding 动画,其实有,只是他是透明的。超过 0.2S 后就真的显示,直到请求返回后 Fade out 。这里的 0.2S 你征求设计师的以前,他期望多久就多久,这样没有闪烁了。
    4 、点赞投币 3 连
    baiyun
        10
    baiyun  
       2022-08-06 11:54:45 +08:00 via iPhone   1
    WhateverYouLike
        11
    WhateverYouLike  
       2022-08-06 13:15:17 +08:00 via Android   2
    关于延迟 loading 的结束时间,我曾尝试过一个方案:loading 动画是由 CSS animation infinite 驱动的。当拿到响应时,不立即取消 loading ,也不立即关闭 animation ,而是等到 animation iteration 的时候再取消动画,这样可以保证动画总是在完整的周期更替时结束。
    tanranran
        12
    tanranran  
       2022-08-06 16:04:23 +08:00
    骨架屏了解一下
    shabbyin
        13
    shabbyin  
       2022-08-07 19:09:29 +08:00 via iPhone
    antd 的 loading 本身是有防闪烁的吧我记得
    94
        14
    94  
       2022-08-08 09:10:13 +08:00
    我觉得骨架屏不是 OP 想要解决的问题点,按我的理解是想要解决 loading 组件的闪白(即进入 loading 的瞬间就触发退出 loading 的事件)。
    可以考虑完整播放一次 loading 动画后再 FadeOut 。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     946 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:08 PVG 03:08 LAX 12:08 JFK 15:08
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86