骨架屏

为了提高首屏体验,在 YIS 应用中,我们提供了页面骨架屏功能。骨架屏幕指的是根据页面目录中的 index.skel 生成的 html 页面,它会页面加载过程中的第一时间被展示,你可以根据你的页面结构渲染一个骨架屏。在有离线包的情况下,骨架屏的显示时间大概是 300+ms,所以推荐为你项目中的所有页面都提供骨架屏。

基本模板

你需要通过页面目录中的 index.skel 来定义一个骨架屏模板。模板使用标准的 html 即可。

代码节选自:yis-demo/src/pages/home/index.skel
<head>
    <style type="text/css">
        /**
         * 你的内容样式
         **/
        .content{}
    </style>
</head>
<body>
    <div class="yis-skeleton">
        <!--你的内容-->
        <p class="content">...</p>
    </div>
</body>
  • 骨架屏内容:需要放在 class 为 yis-skeleton 的容器中,框架会自动为这个容器添加全屏的样式和切换骨架屏时的动画效果。
  • 骨架屏样式:可以通过 style 标签注入到页面中。
  • 页面的样式/脚本文件的注入不需要手动填写。

手动关闭骨架屏

骨架屏在页面加载时显示,默认会在页面第一次 render 时隐藏。但是,在有一些业务场景中,经常需要根据异步请求的数据来展示页面的内容。比如:一个列表页,在骨架屏消失之后,会显示一个加载中的动画,等列表数据返回后才会真正渲染列表。这样,相当于页面经历了两个 loading 的过程。为了解决这个问题,我们提供了手动关闭骨架屏的功能。即,你可以自行选择在什么时候关闭骨架屏。

首先,你需要在 index.skel 的 .yis-skeleton 容器上添加 data-manual-remove="true" 来告诉框架,这个页面的骨架屏是手动关闭的。

代码节选自:yis-demo/src/pages/home/index.skel
<body>
    <div class="yis-skeleton" data-manual-remove="true">
        <!--你的内容-->
        <p class="content">...</p>
    </div>
</body>

然后,你需要在页面的 index.js 中通过 PageCore 提供的 closeSkeleton api 来手动关闭骨架屏。

代码节选自:yis-demo/src/pages/home/index.js
import { PageCore } from '@qnpm/yis';
import { Page } from '@qnpm/yis/components';
import styles from './main.css';

class Home extends PageCore {

    didLoad() {
        // ...
        // 开始请求业务数据
        // ...
    }

    someFun() {
        // ...
        // 业务数据请求回来之后
        // ...
        this.closeSkeleton();
    }

    render() {
        // ...
        // 渲染页面
        // ...
    }
}

export default Home;


以上就是页面骨架屏的使用方法。接下来我们将介绍页面的生命周期。