@vtian/ske

0.0.3 • Public • Published

ske(Skeleton screen)

自动生成骨架屏方案,主要优化用户体验,减少白屏等待

Before start


我们提供两种方法来盛放生成的骨架屏节点:

  1. 配置 output.filepath,如果配置的是目录,会写入到该目录里的 index.html (没有的话我们会创建)文件里;
  2. 自定义写入的方式 writePageStructure: (outputHtml: string) => void;
  3. 如果前面两种方式您都没有提供,那么将会在您当前目录下创建 index.html ,并将骨架屏节点写入;

Install


npm i @vtian/ske -g

Usage


  1. ske init 生成配置文件 ske.config.js
  2. 修改 ske.config.js 进行相关配置
  3. ske start 开始生成骨架屏

Examples


  • basic
// ske.config.js
{
  url: 'https://baidu.com',
  output: {
    filepath: '/Users/famanoder/DrawPageStructure/example/index.html',
    injectSelector: '#app'
  },
  background: '#eee',
  animation: 'opacity 1s linear infinite;',
  // ...
}
  • 根据节点自定义生成
// ske.config.js
...
includeElement: function(node, draw) {
  // 定制某个节点画出来的样子,带上return false
  if(node.id == 'ui-alert') {
    // 跳过该节点及其子节点
    return false;
  }
  if(node.tagName.toLowerCase() === 'img') {
    // 对该图片生成宽100%,高8%,颜色为红色的色块
    draw({
      width: 100,
      height: 8,
      left: 0,
      top: 0,
      zIndex: 99999999,
      background: 'red'
    });
    return false;
  }
}
...
  • 开始生成前的初始化操作
// ske.config.js
init: function() {
  // 生成骨架屏之前的操作

  // 比如删除干扰节点
  let toTop = document.querySelector('#to-top');
  if(toTop) {
    toTop.parentNode.removeChild(toTop);
  }
  // 比如适当的调整某个节点的样式
  let specil = document.querySelector('.specil');
  specil.style.visibility = 'hidden';
}

对于 DOM 结构比较复杂和图片比较多且分布密集的情况生成的骨架屏效果可能不尽如人意,这时候可以使用 includeElement 定制某个节点生成生成什么样子,或者使用 init 在生成骨架屏之前对 DOM 节点进行调整,这两个函数在面对相对复杂的 DOM 结构时会比较有用;

  • 在浏览器中运行
const createSkeletonHTML = require("draw-page-structure/evalDOM");

createSkeletonHTML({
  // ...
  background: "red",
  animation: "opacity 1s linear infinite;",
})
  .then((skeletonHTML) => {
    console.log(skeletonHTML);
  })
  .catch((e) => {
    console.error(e);
  });

可在控制台输出当前页面骨架屏节点,复制添加到应用页面;该做法目前来说最大的作用在于应对需要登录的页面,可在相应页面直接调用 evalDOM 函数生成该页面的骨架屏节点;

参数说明

参数 说明 默认值 是否必填
url 待生成骨架屏的页面地址 --
output.filepath 生成的骨架屏节点写入的文件 --
output.injectSelector 骨架屏节点插入的位置 #app
header.height 主题 header 的高 --
header.background 主题 header 的背景色 --
background 骨架屏主题色 #ecf0f2
animation css3 动画属性 --
rootNode 真对某个模块生成骨架屏 document.body 否-已废弃
device 设备类型,支持 mobile, ipad, pc mobile
extraHTTPHeaders 添加请求头 --
init 开始生成之前的操作 --
includeElement(node, draw) 定制某个节点如何生成 --
writePageStructure(html, ?filepath) 回调的骨架屏节点 --

Package Sidebar

Install

npm i @vtian/ske

Weekly Downloads

1

Version

0.0.3

License

MIT

Unpacked Size

27.8 kB

Total Files

9

Last publish

Collaborators

  • tiandashu