什么是骨架屏?
简单的说 , 骨架屏就是在页面未渲染完成的时候 , 先用一些简单的图形大致勾勒出页面的基本轮廓 , 给用户造成页面正在加载的错觉 , 待页面渲染完成之后再用页面替换掉骨架屏 , 从而减少页面白屏的时间 , 给用户带来更好的体验 。
分析VUE渲染过程
使用vue-cli3.0创建项目: vue create project
在生成的项目文件夹下的public文件夹下的index.html文件代码如下:
可以看到 , DOM里面有一个div#app , 当js被执行完成之后 , 此div#app会被整个替换掉 , 因此 , 如何在Vue页面实现骨架屏 , 已经有了一个很清晰的思路——在div#app内直接插入骨架屏相关内容即可 。
实现方案
手动在div#app里面写入骨架屏内容是不科学的 , 因此需要一个扩展性强且自动化的易维护方案 。既然是在Vue项目里 , 所以所谓的骨架屏也是一个.vue文件 , 它能够在构建时由工具自动注入到div#app里面 。首先 , 我们在/src目录下新建一个Skeleton.vue文件 , 其内容如下:
【详解VUE单页应用骨架屏方案】
接下来 , 在/src目录再新建一个skeleton.entry.js入口文件:
在完成了骨架屏的准备之后 , 我们需要一个关键插件vue-server-renderer 。该插件本用于服务端渲染 , 但是在这里 , 我们主要利用它能够把.vue文件处理成html和css字符串的功能 , 来完成骨架屏的注入 。
骨架屏注入
首先在public文件夹下新建一个template.html文件 , 并且其代码和index.html文件代码相同 , 但是需要在div#app中添加 占位符:
然后 , 我们还需要在根目录新建一个webpack.skeleton.conf.js文件 , 以专门用来进行骨架屏的构建 。
可以看到 , 该配置文件和普通的配置文件基本完全一致 , 主要的区别在于其target: 'node' , 配置了externals , 以及在plugins里面加入了VueSSRServerPlugin 。在VueSSRServerPlugin中 , 指定了其输出的json文件名 。然后通过运行下列指令 , 在/dist目录下生成一个skeleton.json文件: webpack --config ./webpack.skeleton.conf.js 接下来 , 在根目录下新建一个skeleton.js , 该文件即将被用于往index.html内插入骨架屏:
接下来 , 只要运行 node skeleton.js , 就可以完成骨架屏的注入 。为了在 npm run serve 的时候自动完成骨架屏的注入 , 避免运行多次命令 , 需要在 package.json 中增加一条命令 "preserve": "webpack --config ./webpack.skeleton.conf.js && node skeleton.js" ,放在 "serve" 命令之前 。
推荐阅读
- JavaScript设计模式之观察者模式实例详解
- Java异常处理之try...catch...finally详解
- 详解Vue基于vue-quill-editor富文本编辑器使用心得
- 详解css透明度之rgba和opacity的区别及兼容
- vue中tab选项卡的实现思路
- 详解为生产环境编译Angular2应用的方法
- 930机子蓝牙使用篇---上传下载文件详解
- 830系统自带输入法详解
- 830主题、铃声设置详解
- 用大A观看大图实用方法详解