前端骨架屏应用

news2024/11/18 7:48:30

什么是骨架屏

骨架屏可以理解为在页面数据尚未返回或页面未完成完全渲染前,先给用户呈现一个由灰白块组成的当前页面大致结构,让用户产生页面正在逐渐渲染的感受,从而使加载过程从视觉上变得流畅。

生成后的骨架屏页面如下图所示:
请添加图片描述
骨架屏的主要优势为:

  1. 用户避免看到长时间的白页
  2. 可以获知页面的大体结构,减小用户认为页面出错而离开的机率
  3. 与菊花图相比视觉更加流畅

常见前端骨架屏方案

1.UI 骨架屏图

即通过 UI 提供符合页面首页样式的图来充当骨架屏,将骨架屏 base64 图片插入 root 根节点,在 webpack 打包时嵌入项目中。
这是一种简单粗暴的方法,实现起来比较容易。但缺点也很明显,就是需要 UI 设计师支持和开发介入,不能自动生成。

2. 预渲染手书写骨架屏

即通过手写 HTML、CSS 的方式为目标页定制骨架屏。这种方式可以做到对页面真实样式的复刻。不过一旦由于各种原因导致页面样式发生改变,就需要再改一遍骨架屏的样式和布局,极大增加了维护的成本。
如下:

  1. vant框架的van-skeleton组件
// 源码核心实现
function Skeleton(h, props, slots, ctx) {
  if (!props.loading) {
    return slots.default && slots.default();
  }
  // ....
}
  1. vue-skeleton-webpack-plugin+自定义skeleton组件
    这是经过预渲染手动书写的代码生成相应的骨架屏,该方案经过 vueSSR 结合 webpack 在构建时渲染写好的 vue 骨架屏组件,将预渲染生成的 DOM 节点和相关样式插入到最终输出的 html 中。
// vue.config.js
const SkeletonWebpackPlugin = require('vue-skeleton-webpack-plugin')
const isProduction = process.env.NODE_ENV === 'production'

module.exports = {
  css: {
    extract: true // 分离css样式,让骨架屏的css在开发模式下生效
  },
  chainWebpack: config => {
    // 打包时候增加骨架屏
    if (isProduction) {
      config.plugin('skeleton').use(SkeletonWebpackPlugin, [{
        webpackConfig: {
          entry: {
            app: resolve('/src/views/skeleton/skeleton.js')
          }
        },
        minimize: true,
        quiet: true
      }])
    }
  }
}

3. 自动生成静态骨架屏

page-skeleton-webpack-plguin 通过 Puppeteer 操控 handless Chrome 打开需要生成的骨架屏页面,在等待页面加载完成之后,保留页面布局样式的前提下,通过对页面中元素进行增删,对已有元素通过层叠样式进行覆盖,使其展示为灰白块。
它生成骨架屏的方案可以根据项目中不同的路由页面生成相应的骨架屏页面,并将骨架屏页面通过 webpack 打包到对应的静态路由页面中。
它的不足之处在于:
● 实际使用过程中无法监听接口返回导致生成骨架屏的时机是否准确
● 生成的页面与业务人员写的结构质量有直接关系,经常出现需要手工二次调整的情况

4. 自动生成骨架屏(dps)

原理简单来讲就是:遍历(这个遍历其实只需要遍历一层即可)可见区域可见的 DOM节点并获取它们的宽高和位置,然后用这些数据生成骨架屏,最后利用Puppeteer——谷歌的headLesschrome工具来完成完全的自动化生成骨架屏,目前唯一的缺点就是还不支持给单页面的不同路由都设置骨架屏,只能设置其中一个(spa暂时还没有方案)
在这里插入图片描述

使用 CLI 工具生成骨架屏,最多只需以下四步:

  1. 全局安装,npm i draw-page-structure –g
  2. dps init 生成配置文件 dps.config.js
  3. 修改 dps.config.js 进行相关配置
  4. dps start 开始生成骨架屏
    只需简单几步,然而并无繁琐的配置:
    在这里插入图片描述

要按本身的项目状况来配置 dps.config.js,常见的配置项有:
● url: 待生成骨架屏的页面地址
● output.filepath: 生成的骨架屏节点写入的文件
● output.injectSelector: 骨架屏节点插入的位置,默认 #app
● background: 骨架屏主题色
● animation: css3动画属性
● rootNode: 针对某个模块生成骨架屏
● device: 设备类型,默认 mobile
● extraHTTPHeaders: 添加请求头
● init: 开始生成以前的操做
● includeElement(node, draw): 定制某个节点如何生成
● writePageStructure(html, filepath): 回调的骨架屏节点

draw-page-structure
dps

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/63240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第二证券|沪指冲上3200点,中字头太火爆!

轿车整车概念股拉升,多要素共同刺激下,新能源车或将呈现一轮涨价潮。 今天早盘,三大股指走势分解,沪指拉升涨1.56%,站上3200点关口;创业板指则围绕平盘线展开震动,跌0.39%。 以稳妥股为首的大金…

将数据预处理嵌入AI模型的常见技巧

作者:战鹏州 英特尔物联网行业创新大使 目录 1.1 用模型优化器实现数据预处理 1.1.1 模型优化器预处理参数 1.1.2 将ResNet模型的预处理嵌入模型 1.2 用OpenVINO™ 预处理API实现数据预处理 1.3 使用模型缓存技术进一步缩短首次推理时延 1.4 总结 本文将介绍…

机器学习——评估和改进学习算法

0. 引言 当我们运用训练好了的模型来预测未知数据的时候发现有较大的误差,我们下一步可以做什么? 获得更多的训练样本——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。尝试减少特征的…

2022年最新Android面试题整理,全网都在看,史上最全面试攻略

Android面试现在什么东西是必须考察的?专业素养还是面试技巧?四大组件还是Framework层源码?哪有什么必考的,可以说所有技术栈都不是必考,但又是必考。话虽看似矛盾,但却反映了当前国内互联网环境的现状&…

基于随机油漆优化器 (MOSPO)求解多目标优化问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

HTML刷题

HTML5 之前的版本是 HTML4.01 onblur 和 onfocus 属于焦点事件: onblur:失去焦点 onfocus:获取焦点 链接:为同一个文件添加多种文件格式的原因是什么 ?&l__牛客网 来源:牛客网 1.为同一个文件添…

vue提取字符串中中文汉字的大写首字母

vue提取字符串中中文汉字的大写首字母 1.需求背景 最近开发vue项目,在关于药品的项目中有个需求是要提取药品中文名称的首字母组成拼音码。 解决方案 这里需要用到pinyin-pro插件,参数介绍如下: 使用如下: // 1、安装piny…

OpenAI ChatGPT注册试用全攻略

OpenAI ChatGPT注册试用全攻略 最近ChatGPT很火,但是有人注册会经常出现不服务当前地区问题,现在手把手教你解决。 如何在中国试用ChatGPT? 这是ChatGPT给的回答 您好,ChatGPT是一种计算机程序,可以自动生成自然语…

C#大型外卖订单调度系统源码PC版 手机版 商户版

开发环境: VS2012 SQL2008R2 菜单功能 1、手机端功能模块 1)自动定位或者搜索地址:使用百度地图,实现自动定位,打开微信自动定位,搜索附件外卖商家 2)附近外卖商家展示&…

《痞子衡嵌入式半月刊》 第 31 期

痞子衡嵌入式半月刊: 第 31 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢…

后端存储实战课——高速增长篇

数据库超时 MySQL CPU 的利用率一直是 100% 的话,MySQL 基本属于不可用的状态,执行的 SQL 都会超时。 CPU 利用率高的情况,绝大多数是由于慢 SQL 引起的,可以通过分析慢 SQL 日志查找类似问题原因。由于数据库忙的时候&#xff…

深入学习Android

我通过阅读邓凡平前辈的《深入理解Android》,为了加深学习作此学习笔记。虽然是邓老师2011著的书,但其中的安卓框架还是可以学习的。另老师的csdn地址在:阿拉神农的博客_CSDN博客-Android开发系列,深入理解Android,移动万态领域博主tips:阅读…

如何进阶一名有竞争力的程序员?

前言 这段时间,又互联网寒冬了,你看消息满天飞。一瞬间,裁员的,辟谣的,很是热闹。这搞得我们程序员很难受,本来压力就大,还动不动有人在你耳边煽风点火制造恐慌。我想说:难道就不能…

[附源码]Python计算机毕业设计SSM教师信息采集系统(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

APISIX 在君润人力云原生平台的架构实践

讲师:袁鹏,一页科技架构师 摘要: 君润人力采用多套 Apache APISIX 集群来满足自研服务平台的功能需求。 君润人力成立于 2019 年,是一家以科技驱动的人力资源解决方案服务商,依托行业领先的科技水平和服务能力&#xf…

透视投影函数的图像

因为有个需求是判断线是否被视锥体裁切,因为NDC比较好判断是否裁切,所以研究了一下透视投影变换的函数图像。 从透视投影矩阵可以看出,在同一个z上,x,y都是线性的,所以这里主要研究z的变换函数图像。 我用的是Vulkan&a…

[附源码]Python计算机毕业设计SSM健身网站平台(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

【SQL】锁机制

【SQL】锁机制锁的不同角度分类从数据操作的类型划分:读锁,写锁从数据操作的粒度划分:表级锁,页级锁,行锁表锁意向锁(intention lock)自增锁(AUTO-INC锁)元数据锁&#x…

Java --- Spring6对IoC的实现

目录 一、控制反转 二、依赖注入 三、set注入 四、构造注入 一、控制反转 1、控制反转是一种思想 2、控制反转是为了降低程序耦合度,提高程序扩展力,达到OCP原则,达到DIP原则。 3、控制反转主要有:①、将对象的创建权力交出去&#xff…

莱特飞行优化及其使用场景

莱特飞行优化及其使用场景 一,莱特飞行 但是产生一个莱特飞行分布的随机数是比较难的,莱特只给出了一个积分,所以后面就有人提出了如何制造这样分布的随机数。 Mantegna 在1994年提出的一种用正态分布求解随机数的方法,有时也叫…