兄弟们, vue 网页有没有办法实现页面首页加载超过 1 秒才显示 loading, 1 秒内就不显示 loading 吗
目前我采用的是常规的实现方式,在还 vue 没渲染的时候显示 loading ,挂载渲染后隐藏 loading ,首次效果不错,但是后续浏览器有缓存了,在加载很快的情况下,loading 的显示就会闪一下,感觉不是很爽,有办法实现我标题中的这种需求吗。。
强行假装 1 秒再展示即可。
这个我也想到了,延迟 1 秒在隐藏,看看其他兄弟有没有好办法,不行的话只能这么改咯。。
全屏 loading 的话可以强行多看几秒 loading
const timeoutId = setTimeout(() => this.loading = true, 1000)
try {
const res = await getResource()
} catch(err) {
console.log(err)
}
this.loading = false
clearTimeout(timeoutId)
骨架屏 / v-cloak
如果你的 loading 在实例中的话,可以用 defineAsyncComponent 定义一个入口的异步组件,在 loader 里面加载数据和其他组件,用 delay 控制 loadingComponent 的展示时机。
记一下平均耗时?超过一定范围才渲染 loading
强行显示 1 秒的 loading 呗,不然还有啥办法呢?毕竟你不能预知要加载多久啊😂
咋判断时间呢,我题目就是问这个的意思。。
#9 juejin.cn/post/6844903569900978189
参考这个?不是让你算现在这个页面加载多久再决定是否开启 loading
是让你算前面几个页面的平均值,小于一定值就禁用 loading
在 index.html 的 head 元素里用 js script 脚本设置个 1 秒的 timeout ,到了再显示 loading 。当在 vue 加载出来时判断这个 timeout 在不,如果在的话(加载时间小于 1 秒)取消掉。
刚好 1.1 秒加载完成呢,loading 不还是一闪而过吗,所以问题不在这
以前好像做过但是没用判断不出来 contentloaded 时间 伪 1S 感觉在浪费时间尽管人感受不出来速度。所以感觉没必要折腾完美。
300ms 内没加载完才显示 loading ,如果显示 loading ,至少显示 1s
1s 已经够久的了
我是强制显示 1 秒的 loading 。。
antd 的 Spin 就是这种设计, 但是我觉得, 直接展示 loading,至少展示 300ms 的逻辑更简单
直接显示加载指示器,给这个组件加上 1 秒的 opacity 从 0 到 100% 的 transtion
让你的 loading 延迟一秒展示
谁喜欢看 loading 啊,一闪而过代表网速性能好,是正反馈啊。
我就是这么用的,实现没用 js ,用的是 css animation 就有的延迟动画 1s 功能
我会选择用 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});
噢,没注意审题,想在 vue 运行时还没加载时就开始计时并显示 loading ,应该在 html 的 head 里尽早加载独立的 script 来控制骨架屏的显隐吧
强制至少 loading X 秒的体验会好一点,效果稳定。比如,至少 loading 0.3 秒,如果 0.3 秒后页面还没准备好,那就继续 loading 。
vue 没渲染的时候显示 loading ,是怎么整的?
这个叫 grace time 。一般的处理方式是:1. 增加一个延迟 2. 增加最短展示时间。
延迟时间内不显示 loading ,如果延迟时间内加载完毕,直接进入。如果延迟时间内没有加载完毕,显示 loading ,时间是 MIN(最短展示时间,实际时间)。
MIN => MAX
试试渐变显示 loading ,渐变退出 loading 的方案呢?
这样视觉上就是不是闪烁效果了.....
设置至少 loading 1 秒
进页展示一个透明 1s 后渐入 100%的动画 loading 。
这个确定不是 yy 的需求或者老板的需求?
听起来不怎么靠谱
请求速度快的时候出现 loading ,而较快时不出现。月经问题了,淘宝在用 setTimeout ,缺点是一秒左右的 loading 体验不好,0.9 秒没有 loading ,1.1 秒 loading 一闪而过
都被你们玩花了,该显示就显示,不显示就不要显示。
underscore 的 throttle 函数可以处理这个问题。
。。。。一个 css 的 transiton 不就可以了,还要这么折腾
这题我做过。
分析一下题目:
在还 vue 没渲染的时候显示 loading ,挂载渲染后隐藏 loading
这一条,把 loading 界面放到 vue 实例挂在的 DOM 元素里面就行了,挂载后组件渲染出来的 DOM 会替换原本的内容首页加载超过 1 秒才显示 loading ,1 秒内就不显示 loading
给上一条的 loading 界面加个 css 样式,透明度为 0 ,所以开始时看不到这个 loading 界面
然后再加个 css animation ,1s 后把透明度变为 1 ,所以这时就能看到了
样例代码:
fadeIntLoading {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
animation: fadeIntLoading 0.1s linear 1s forwards;
opacity: 0;
fadeIntLoading 不小心多打了个 t ,不过不影响功能
loading 添加渐显过渡动画,超过 1s 才全部显示出来,小于 1s 就是没全部显示就渐隐了
这个一般放到 html 里面做,不放在 vue 里面做
写了个样例,直接就有效果
codepen.io/sanmao/pen/eYKwLRv
这个看起来和你说的异曲同工, baiyun.me/improve-the-user-experience-for-react-apps
这样行的不...
// 初始 loading 为 false
let timer = setTimeout(() => {
loading = true
}, 1000)
// 在 App.vue 的 mounted 钩子中
loading = false // 假设加载资源已经超过 1s ,在挂载完成时取消 loading
clearInterval(loading) // 假设 1s 内已经挂载完成,取消 loading
如果用了 RxJS , 也可以实现, juejin.cn/post/7176943529057321017
不就普通的延时 Loading 么?
都是差不多的思路,一般是设置延迟 2~3 秒显示 Loading ,如果期间数据还没加载完,那就继续显示 Loading ;
如果 2~3 秒内已经加载完了,就取消 Loading
js 文件本身的加载时间是未知的,所以任何 js 层面的处理都达不到你想要的效果。如果这个误差你能接受,那随便挑一个方法都行。
关键词: setTimeout
试试用 tmpUI 做真加载进度
github.com/tmplink/tmpUI
特意登陆来回复你一下:
把 Loading 写在 HTML 模版中,页面开始加载时 setTimeout 计时一秒开始展示 Loading DOM
在 Vue 的初始化逻辑中加载完成时 remove 掉 Loading DOM 即可
/* 秒级响应不再显示 loading 弹窗 /
const delay = 1000
let timeoutId = setTimeout(() => {
if (loading) {
timeoutId = 0;
//
showLoading()
}
}, delay);
// 响应里面
if(timeoutId==0){
closeLoading()
}
对正则表达式很头疼,是不是?每次看到都觉得像看天书似的,别说让人自己整一个出来了。下面这个网站可以帮你生成正则表达式,而且还可以根据不同的语言生成不同的代码示例,很强大。 …
一个最简单的 http 服务器: func main() { fs := http.FileServer( http.Dir("./public")) http.Handl…
好家伙,阿里云是良心发现了么。余额莫名其妙多出来 5 万,工单说是我们自己账号打的钱,可是财务没这笔支付记录。这笔钱该怎么办,挺急的,在线等。 给你你就拿着 问题是我已经迁…