简介
像React这样开发的大前端Web应用有一个通病,就是首屏加载时间较长,而且在加载过程中用户看到的都是白屏,此时如果你的服务器或者用户自己的带宽过小的话可能会让用户以为这个网站挂掉了,从而导致流量损失。下图是Twitter网站的加载页面,像Twitter这样弄一个Loading页面或者图片也许就能在页面加载缓慢时留住用户。
本文用来记录一下如何实现在大前端JS加载前呈现一个Loading页面。
实现方法
实现方法很简单,直接在项目根目录的index.html
中编写加载页面就行了。
建议在id
为root
的根节点中编写加载页面
因为在根节点中编写的内容,会在React前端JS加载完毕并开始渲染时被自动清除,正好省去了手动清理Loading
的麻烦。
比如我把root
div
改成下面这样:
<div id="root">
<div id="loading">
<img src="https://img.hash070.top/i/63b2693d4f9c3.webp" width="72px" alt="logo">
<p style="text-align: center">Loading</p>
</div>
</div>
那么React项目首屏加载时的效果就是这样的:
React开始渲染时确实也会被自动移除,感觉还不错。
参考链接:https://stackoverflow.com/questions/40987309/react-display-loading-screen-while-dom-is-rendering
More
刚刚的只是放了一个图片,也许有同学觉得还是差点意思,那么也许我们可以整一个CSS动画,让Loading更好看一点?
首先把css
写到头部的style
块中:
<style>
.loader {
border: 6px solid #e4f2fb;
border-radius: 50%;
border-top: 6px solid #1d9aee;
width: 32px;
height: 32px;
-webkit-animation: spin 0.4s linear infinite; /* Safari */
animation: spin 0.4s linear infinite;
}
/* Safari */
@-webkit-keyframes spin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes spin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
</style>
然后在根div
里这样写
<div id="root">
<div id="loading">
<img src="https://img.hash070.top/i/63b2693d4f9c3.webp" style="margin:0 auto;display: block" width="72px" alt="logo">
<div style="margin:20px auto" class="loader"></div>
</div>
</div>
实现效果:
更多现成的CSS Loader:
参考链接:https://www.w3schools.com/howto/howto_css_loader.asp