![]() | 1 lambdaq 2022-12-13 23:15:30 +08:00 强行假装 1 秒再展示即可。 |
3 renmu 2022-12-13 23:25:41 +08:00 via Android 全屏 loading 的话可以强行多看几秒 loading |
![]() | 4 rabbbit 2022-12-13 23:28:14 +08:00 const timeoutId = setTimeout(() => this.loading = true, 1000) try { const res = await getResource() } catch(err) { console.log(err) } this.loading = false clearTimeout(timeoutId) |
![]() | 5 horseInBlack 2022-12-13 23:28:58 +08:00 骨架屏 / v-cloak |
![]() | 6 vace 2022-12-13 23:29:43 +08:00 如果你的 loading 在实例中的话,可以用 defineAsyncComponent 定义一个入口的异步组件,在 loader 里面加载数据和其他组件,用 delay 控制 loadingComponent 的展示时机。 |
![]() | 7 SQLException 记一下平均耗时?超过一定范围才渲染 loading |
![]() | 8 anguiao 2022-12-13 23:31:25 +08:00 强行显示 1 秒的 loading 呗,不然还有啥办法呢?毕竟你不能预知要加载多久啊 |
![]() | 9 dafuyang OP @SQLException 咋判断时间呢,我题目就是问这个的意思。。 |
![]() | 10 SQLException 2022-12-13 23:43:47 +08:00 @dafuyang #9 https://juejin.cn/post/6844903569900978189 参考这个?不是让你算现在这个页面加载多久再决定是否开启 loading 是让你算前面几个页面的平均值,小于一定值就禁用 loading |
![]() | 11 darkengine 2022-12-14 00:04:33 +08:00 在 index.html 的 head 元素里用 js script 脚本设置个 1 秒的 timeout ,到了再显示 loading 。当在 vue 加载出来时判断这个 timeout 在不,如果在的话(加载时间小于 1 秒)取消掉。 |
![]() | 12 sheeta 2022-12-14 00:05:24 +08:00 ![]() 刚好 1.1 秒加载完成呢,loading 不还是一闪而过吗,所以问题不在这 |
![]() | 13 lightyisu 2022-12-14 00:53:25 +08:00 以前好像做过但是没用判断不出来 contentloaded 时间 伪 1S 感觉在浪费时间尽管人感受不出来速度。所以感觉没必要折腾完美。 |
14 yfugibr 2022-12-14 01:16:38 +08:00 via Android ![]() 300ms 内没加载完才显示 loading ,如果显示 loading ,至少显示 1s |
![]() | 15 MrHyde 2022-12-14 04:17:26 +08:00 1s 已经够久的了 |
![]() | 16 huijiewei 2022-12-14 08:08:57 +08:00 我是强制显示 1 秒的 loading 。。 |
![]() | 17 gaolingyi 2022-12-14 08:15:57 +08:00 ![]() antd 的 Spin 就是这种设计, 但是我觉得, 直接展示 loading,至少展示 300ms 的逻辑更简单 |
![]() | 18 ragnaroks 2022-12-14 08:32:55 +08:00 ![]() 直接显示加载指示器,给这个组件加上 1 秒的 opacity 从 0 到 100% 的 transtion |
![]() | 19 cangcang 2022-12-14 09:25:44 +08:00 让你的 loading 延迟一秒展示 |
![]() | 20 SmiteChow 2022-12-14 09:29:06 +08:00 谁喜欢看 loading 啊,一闪而过代表网速性能好,是正反馈啊。 |
![]() | 21 makelove 2022-12-14 09:49:05 +08:00 我就是这么用的,实现没用 js ,用的是 css animation 就有的延迟动画 1s 功能 |
![]() | 22 yamedie 2022-12-14 09:59:23 +08:00 via Android 我会选择用 Promise.race ,好处是省得手动 set 和 clear 定时器(也不用去比对 Date.now()),逻辑也更清晰一点儿。 const sleep = time => new Promise(resolve => setTimeout(resolve, time)); let isLoading = false; const promiseSleep = sleep(1000); const promiseAjax = fetch(xxx).then(res => {xxxx 业务逻辑; return true}).finally(() => {isLoading = false}); Promise.race([promiseSleep, promiseAjax]).then(res => {if (!res) isLoading = true}); |
![]() | 23 yamedie 2022-12-14 10:03:34 +08:00 via Android 噢,没注意审题,想在 vue 运行时还没加载时就开始计时并显示 loading ,应该在 html 的 head 里尽早加载独立的 script 来控制骨架屏的显隐吧 |
24 justdoit123 2022-12-14 10:10:56 +08:00 强制至少 loading X 秒的体验会好一点,效果稳定。比如,至少 loading 0.3 秒,如果 0.3 秒后页面还没准备好,那就继续 loading 。 |
25 darknoll 2022-12-14 10:15:24 +08:00 vue 没渲染的时候显示 loading ,是怎么整的? |
![]() | 26 kealm 2022-12-14 10:27:59 +08:00 ![]() 这个叫 grace time 。一般的处理方式是:1. 增加一个延迟 2. 增加最短展示时间。 延迟时间内不显示 loading ,如果延迟时间内加载完毕,直接进入。如果延迟时间内没有加载完毕,显示 loading ,时间是 MIN(最短展示时间,实际时间)。 |
28 dreamn 2022-12-14 10:33:22 +08:00 试试渐变显示 loading ,渐变退出 loading 的方案呢? 这样视觉上就是不是闪烁效果了..... |
![]() | 29 rrZ2C 2022-12-14 10:41:18 +08:00 设置至少 loading 1 秒 |
![]() | 30 flyingghost 2022-12-14 12:20:13 +08:00 进页展示一个透明 1s 后渐入 100%的动画 loading 。 |
![]() | 31 4771314 2022-12-14 15:32:05 +08:00 这个确定不是 yy 的需求或者老板的需求? 听起来不怎么靠谱 |
32 YouTing 2022-12-14 15:46:52 +08:00 请求速度快的时候出现 loading ,而较快时不出现。月经问题了,淘宝在用 setTimeout ,缺点是一秒左右的 loading 体验不好,0.9 秒没有 loading ,1.1 秒 loading 一闪而过 |
![]() | 33 QKgf555H87Fp0cth 2022-12-14 15:51:46 +08:00 都被你们玩花了,该显示就显示,不显示就不要显示。 |
34 jorneyr 2022-12-14 16:21:10 +08:00 underscore 的 throttle 函数可以处理这个问题。 |
35 296727 2022-12-14 16:22:50 +08:00 。。。。一个 css 的 transiton 不就可以了,还要这么折腾 |
![]() | 36 sanmaozhao 2022-12-14 16:31:44 +08:00 这题我做过。 分析一下题目: >> 在还 vue 没渲染的时候显示 loading ,挂载渲染后隐藏 loading 这一条,把 loading 界面放到 vue 实例挂在的 DOM 元素里面就行了,挂载后组件渲染出来的 DOM 会替换原本的内容 >> 首页加载超过 1 秒才显示 loading ,1 秒内就不显示 loading 给上一条的 loading 界面加个 css 样式,透明度为 0 ,所以开始时看不到这个 loading 界面 然后再加个 css animation ,1s 后把透明度变为 1 ,所以这时就能看到了 样例代码: @keyframes fadeIntLoading { from { opacity: 0; } to { opacity: 1; } } animation: fadeIntLoading 0.1s linear 1s forwards; opacity: 0; |
![]() | 37 sanmaozhao 2022-12-14 16:33:29 +08:00 fadeIntLoading 不小心多打了个 t ,不过不影响功能 |
38 loolac 2022-12-14 16:36:47 +08:00 loading 添加渐显过渡动画,超过 1s 才全部显示出来,小于 1s 就是没全部显示就渐隐了 |
39 jeffwcx 2022-12-14 16:39:24 +08:00 这个一般放到 html 里面做,不放在 vue 里面做 |
![]() | 40 sanmaozhao 2022-12-14 16:53:42 +08:00 |
![]() | 41 isbase 2022-12-14 16:59:17 +08:00 |
![]() | 42 bitkuang8 2022-12-14 18:10:50 +08:00 这样行的不... ```js // 初始 loading 为 false let timer = setTimeout(() => { loading = true }, 1000) // 在 App.vue 的 mounted 钩子中 loading = false // 假设加载资源已经超过 1s ,在挂载完成时取消 loading clearInterval(loading) // 假设 1s 内已经挂载完成,取消 loading ``` |
![]() | 43 leonPuck 2022-12-14 18:10:52 +08:00 如果用了 RxJS , 也可以实现,https://juejin.cn/post/7176943529057321017 |
![]() | 44 raolight 2022-12-14 18:20:09 +08:00 不就普通的延时 Loading 么? 都是差不多的思路,一般是设置延迟 2~3 秒显示 Loading ,如果期间数据还没加载完,那就继续显示 Loading ; 如果 2~3 秒内已经加载完了,就取消 Loading |
![]() | 45 Ketteiron 2022-12-14 19:26:40 +08:00 js 文件本身的加载时间是未知的,所以任何 js 层面的处理都达不到你想要的效果。如果这个误差你能接受,那随便挑一个方法都行。 |
46 grewer 2022-12-14 19:32:04 +08:00 关键词: setTimeout |
![]() | 47 Actrace 2022-12-14 19:43:24 +08:00 试试用 tmpUI 做真加载进度 https://github.com/tmplink/tmpUI |
![]() | 48 thulof 2022-12-14 19:47:40 +08:00 特意登陆来回复你一下: 把 Loading 写在 HTML 模版中,页面开始加载时 setTimeout 计时一秒开始展示 Loading DOM 在 Vue 的初始化逻辑中加载完成时 remove 掉 Loading DOM 即可 |
49 gengliangcais 2022-12-15 11:39:00 +08:00 /** 秒级响应不再显示 loading 弹窗 */ const delay = 1000 let timeoutId = setTimeout(() => { if (loading) { timeoutId = 0; // showLoading() } }, delay); // 响应里面 if(timeoutId==0){ closeLoading() } |
![]() | 50 dafuyang OP @darkengine @yfugibr @ragnaroks @kealm @dreamn @flyingghost @rrZ2C @YouTing @296727 @sanmaozhao @sanmaozhao @raolight @grewer @thulof 兄弟们,感谢大家的意见!!!这段时间梯子挂了,上不来。。综合试了一下,js settimeout 或者是动画延迟执行在加上渐变过渡都可以满足俺的需求,再次谢谢各位!! |
52 humbass 2023-01-14 00:05:49 +08:00 本质上应该有 4 个状态: 0 - 未知状态 - 按楼主的意思相当于是白屏,或者显示骨架页内容 1 - 有缓存数据,准备加载数据 2 - 没有缓存,显示 loading 3 - 数据已装载 1 和 3 合并也可以 不关 setTimeout 什么事,如果要用到 延时,说明只写了两个状态 |