基于饿了么骨架屏方案,使用Chrome扩展程序生成网页骨架屏

2023-05-16

前言

之前写移动端项目的时候,使用骨架屏来解决首屏渲染时出现短暂空白现象,采用了就是饿了么page-skeleton-webpack-plugin方法

但是page-skeleton-webpack-plugin需要puppeteer这个依赖,这玩意会导致整个项目在开发阶段很笨重,而且不是所有的页面都要用到骨架屏,后面找了套方案,决定使用谷歌插件代替puppeteer

Chrome扩展程序生成网页骨架屏

谷歌插件下载

image.png

最新版本下载地址,还未通过谷歌官方审核, PS: 谷歌插件如何安装,自行谷歌

效果图

如何使用

插件参数

同饿了么骨架屏文档保持一样,如下图

骨架屏原理

饿了么骨架屏原理,具体可以看看这篇文章

其实思路很简单,我们可以根据已有的dom结构,覆盖指定上的颜色,这样就大致实现了,不过这套方案有两个难点

  • 如何辨别容器和块

  • css冗余样式和冗余dom结构处理

容器和块

因为不是所有的dom节点都覆盖指定的背景色,有些dom是作为容器,来看饿了么是怎么处理的


  // 将所有拥有 textChildNode 子元素的元素的文字颜色设置成背景色,这样就不会在显示文字了。
  if (ele.childNodes && Array.from(ele.childNodes).some((n) => n.nodeType === Node.TEXT_NODE)) {
   transparent(ele)
  }
  if (checkHasTextDecoration(styles)) {
   ele.style.textDecorationColor = TRANSPARENT
  }
  // 隐藏所有 svg 元素
  if (ele.tagName === 'svg') {
   return svgs.push(ele)
  }
  // ! 针对于容器中如果有background或者img的 如果有需要当做块处理 否则就以容器为处理
  if (EXT_REG.test(styles.background) || EXT_REG.test(styles.backgroundImage)) {
   return hasImageBackEles.push(ele)
  }
  // export const GRADIENT_REG = /gradient/
  // CSS linear-gradient() 函数用于创建一个表示两种或多种颜色线性渐变的图片
  if (GRADIENT_REG.test(styles.background) || GRADIENT_REG.test(styles.backgroundImage)) {
   return gradientBackEles.push(ele)
  }
  if (ele.tagName === 'IMG' || isBase64Img(ele)) {
   return imgs.push(ele)
  }
  if (
   ele.nodeType === Node.ELEMENT_NODE &&
   (ele.tagName === 'BUTTON' || (ele.tagName === 'A' && ele.getAttribute('role') === 'button'))
  ) {
   return buttons.push(ele)
  }
  if (
   ele.childNodes &&
   ele.childNodes.length === 1 &&
   ele.childNodes[0].nodeType === Node.TEXT_NODE &&
   /\S/.test(ele.childNodes[0].textContent)
  ) {
   return texts.push(ele)
  }
 })(rootElement)

 // ! dom节点 引用类型  这里统一收集对应类型的dom 然后集中用对应的handler处理
 console.log('button数组', buttons)
 console.log('hasImageBackEles', hasImageBackEles)
 console.log(pseudos, gradientBackEles, grayBlocks)
 svgs.forEach((e) => handler.svg(e, svg, cssUnit, decimal))
 texts.forEach((e) => handler.text(e, text, cssUnit, decimal))
 buttons.forEach((e) => handler.button(e, button))
 console.log('imgs数组', imgs)

 hasImageBackEles.forEach((e) => handler.background(e, image))
 imgs.forEach((e) => handler.image(e, image))
 pseudos.forEach((e) => handler.pseudos(e, pseudo))
 gradientBackEles.forEach((e) => handler.background(e, image))
 grayBlocks.forEach((e) => handler.grayBlock(e, button))

解决的方式很简单,根据该dom是否有background、backgroundImage、linear-gradient是否为容器

css冗余样式和冗余dom结构处理

饿了么那套解决方案是有对冗余节点和样式做了处理,但是效果并不是很明显,我们换种思路想,竟然我们已经知道那个节点是容器,那个节点是,那么我们是不是对于容器这种节点做剔除,因为真正展示在页面的是对应的骨架屏块,而对于具体位置,可以使用绝对定位,通过getBoundingClientRect这个api获取

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于饿了么骨架屏方案,使用Chrome扩展程序生成网页骨架屏 的相关文章

  • SpringSecurityOAuth和Jwt

    一 SpringSecurityOAuth简介 grant type为授权模式password为密码模式 64 EnableAuthorizationServer表示定义认证服务器 64 EnableResourceServer表示定义资源
  • 无法使用ssh的可能

    1 SSH服务未启动 xff1a 请确保SSH服务在远程计算机上已经启动 在Ubuntu上 xff0c 可以通过运行以下命令来启动SSH服务 xff1a sudo service ssh start 2 防火墙阻止了SSH连接 xff1a
  • CentOS7.0 关闭防火墙

    systemctl stop firewalld service 停止firewall systemctl disable firewalld service 禁止firewall开机启动
  • 如何查看张量tensor,并将其转换为numpy数据

    在tensorflow 中一般数据都是用tensor来表示 xff0c 而在python 中一般是用numpy包 xff0c 然而有时候需要打印变量的数据 xff0c 可用以下方法来打印 xff1a 一 import tensorflow
  • 浅谈联邦学习Federated Learning

    最近人工智能 大数据领域的公众号疯狂给我推送 联邦学习 相关的文章 xff0c 使得本来并不好奇的我 xff0c 有了一丝丝揭开它神秘面纱的冲动 公众号的每篇推文写得都很好 xff0c 但同时也十分学术 xff0c 作为刚上路的我 xff0
  • 云计算中的容器技术及其实践案例

    第一章 xff1a 什么是容器技术 随着云计算和DevOps的普及 xff0c 容器技术在IT行业中越来越受到关注 容器是一种轻量级 可移植 可扩展的应用程序封装技术 xff0c 可以将应用程序及其所有依赖项打包到一个独立的可执行文件中 相
  • 小坑整理

    for range坑 问题描述 range循环的时候 xff0c 取赋值的地址 xff0c 然后保存到map中 xff0c 结果是什么样子 xff1f 这里先回想下变量是什么时候才申请内存 xff1f 只有赋值给新的变量时 xff0c 内存
  • go操作es

    TOC 前言 xff1a elasticsearch 是一个基于Lucene构建的开源的 分布式 restful接口的全文搜索引擎 es还是一个分布式的文档数据库 xff0c 其中每个字段均可被索引 xff0c 而且每个字段的数据均可被搜索
  • 9-gin使用websocket

    toc gin使用websocket Gin 框架默认不支持 websocket xff0c 可以使用 github com gorilla websocket 实现 Talk is cheap Show me the code xff0c
  • 1. 准备环境

    硬件资源 mac 12 2 1 golang 1 15 3 minikube v1 25 1 prometheus operator 0 35 1 下载地址 xff1a https github com prometheus operato
  • pprof查docker内存占用

    https zhuanlan zhihu com p 363584053 https blog csdn net u010278923 article details 78774914
  • oklog run包使用

    oklog run 包介绍 oklog run 包非常简单 xff0c 只有一个类型 xff0c 两个方法 xff0c 共 60 行代码 其中 Group 是一组 actor xff0c 通过调用 Add 方法将 actor 添加到 Gro
  • windows上IIS实现https,配置ssl证书

    windows2003 系统IIS6安装ssl证书 http bbs qcloud com thread 4793 1 1 html windows2012实现IIS7的https 1 申请证书 xff0c 这里申请腾讯云的证书 1 xff
  • Ubuntu 14.04升级到Ubuntu 16.04(桌面版和字符版)

    下面记录了从Ubuntu 14 04 15 10升级到Ubuntu 16 04的步骤 桌面版 在升级系统之前 xff0c 我们先更新一下系统 打开终端执行如下命令 xff1a sudo apt span class hljs attribu
  • 编写使用systemctl启动服务脚本

    CentOS 7的服务systemctl脚本存放在 xff1a usr lib systemd xff0c 有系统 xff08 system xff09 和用户 xff08 user xff09 之分 xff0c 像需要开机不登陆就能运行的
  • python中print打印显示颜色

    显示颜色的格式 xff1a 033 显示方式 字体色 背景色m 033 0m 显示颜色的参数 xff1a 显示方式效果字体色背景色颜色描述0终端默认设置3040黑色1高亮显示3141红色4使用下划线3242绿色5闪烁3343黄色7反白显示3
  • ds1302时钟芯片工作原理引脚电路图及功能

    资源获取码 xff1a aaaa DS1302时钟实用仿真图 上面仿真图功能描述 xff1a 1 能读取DS1302数据 xff0c 并显示在数码管上面 2 带按键设置功能 xff0c 可以设置DS1302时分秒数据 3 带倒计时功能 xf
  • 吴恩达 DeepLearning 第一课第二周编程题目及作业(可免费下载资源)

    提示 作业里面会有需要用到的 Python 模块以及数据集 所以我下面再附上所需要的文件下载链接 xff0c 不把所有文件连同作业放一起打包好的目的是让第一次接触 Python 的人更多的了解 Python xff0c 万事开头难 xff0
  • linux centos7.6 关闭防火墙

    停止firewall root 64 lch software systemctl stop firewalld service 禁止firewall开机启动 root 64 lch software systemctl disable f
  • STM32之SHT30温湿度传感器驱动代码(程序稳定,清晰明了)

    第一部分 xff1a SHT30温湿度模块代码头文件 xff08 SHT30 h xff09 ifndef SHT30 H define SHT30 H include 34 delay h 34 include 34 sys h 34 i

随机推荐

  • 数据集(3):从0了解INRIA数据集

    该数据集分为两种格式 xff1a xff08 a xff09 具有对应注释文件的原始图像 xff08 b xff09 原始的负样本图像和标准化64 128像素的正样本图像 xff08 用于CVPR论文中的 xff09 根目录下虽然有六个文件
  • Ubuntu 登录界面,字体变大,输入密码出现循环登录问题

    出现这个问题 xff0c 很大可能就是显卡驱动掉了 xff0c 只需重新安装就好 参考 xff1a https blog csdn net qq 36427732 article details 80914653 一 下载显卡驱动 用一台电
  • virtualenv的使用

    安装 pip install virtualenv 使用 1 创建一个文件夹 xff0c 用来存放环境 xff0c 之后pip install 之类的东西都在里面 2 在该文件夹中建立该环境 virtualenv p usr bin pyt
  • LIF神经元介绍

    Integrate And Fire Models 基础知识 轴突 xff1a 动作电位 xff08 电位差形成电流 xff09 61 神经递质发放 61 脉冲产生 树突或细胞体 xff1a 神经递质的接受 61 产生内外膜电位差 xff0
  • 神经网络中Batch Size的理解

    直观的理解 xff1a Batch Size定义 xff1a 一次训练所选取的样本数 Batch Size的大小影响模型的优化程度和速度 同时其直接影响到GPU内存的使用情况 xff0c 假如你GPU内存不大 xff0c 该数值最好设置小一
  • Hessian矩阵

    转 xff1a 黑塞矩阵 xff08 Hessian Matrix xff09 转 xff1a Hessian矩阵以及在图像中的应用 黑塞矩阵 xff08 Hessian Matrix xff09 xff0c 是一个多元函数的二阶偏导数构成
  • 残差结构详解

    背景知识 xff1a 为什么要构建深层网络 xff1f 答 xff1a 认为神经网络的每一层分别对应于提取不同层次的特征信息 xff0c 有低层 xff0c 中层和高层 xff0c 而网络越深的时候 xff0c 提取到的不同层次的信息会越多
  • 第二章 Internet 地址结构

    第二章 Internet 地址结构 本文为 TCP IP 详解 学习笔记 文章目录 第二章 Internet 地址结构2 1 引言2 2 表示 IP 地址IPv4 地址IPv6 地址 2 3 基本的 IP 地址结构2 3 1 分类寻址2 3
  • 机器学习中数据不均衡问题(分类类别数据不均匀)

    在机器学习中 xff0c 我们经常会遇到类别数据分布不均衡问题 xff0c 即某类中含有很多数据 xff0c 而其他类别中的数据量很少 在这种情况下 使用传统机器学习算法开发的预测模型可能存在偏差和不准确 xff0c 造成上述的原因是 xf
  • EAST: An Efficient and Accurate Scene Text Detector翻译

    Abstract 用于场景文本检测的先前方法已经在各种基准测试中获得了良好的性能 然而 xff0c 在处理具有挑战性的场景时 xff0c 即使配备了深度神经网络模型 xff0c 它们通常也会达不到很好性能 xff0c 因为整体性能取决于管道
  • pytorch搭建网络结构

    记录pytorch怎么搭建网络 xff0c 看起来更舒服 首先定义一个block class myBlock nn module def init self in channel out channel xff1a super myBloc
  • ubuntu codename

    1 查看当前系统的codename lsb release a 2 历史版本codename Ubuntu 发布版本的官方名称是 Ubuntu X YY xff0c 其中 X 表示年份 xff08 减去2000 xff09 xff0c YY
  • xubuntu_18.04取消开机自动登录

    虽然开机自动登录听方便的 xff0c 但是总感觉不是那么的安全 xff0c 就把开机自动登录取消了 xff0c 下面是取消自动登录的方法 1 首先查一下自动登录的用户 grep R 34 autologin 34 etc lightdm 注
  • 双目相机与IMU联合标定

    前言 为了后面的视觉激光融合SLAM以及跑通VINS Fusion xff0c 需要标定双目相机和IMU得内参以及它们得外参 xff08 变换矩阵 xff09 准备工作 双目相机 xff1a ZED mIMU xff1a realsense
  • Python中画图时候的线类型

    在Python中用matplotlib画图的时候 xff0c 为了区分曲线的类型 xff0c 给曲线上面加一些标识或者颜色 以下是颜色和标识的汇总 颜色 xff08 color 简写为 c xff09 xff1a 蓝色 xff1a 39 b
  • Ubuntu20.04中,安装微信步骤总结

    先安装git xff08 如果已安装 xff0c 清忽略 xff09 sudo apt install git 检查git是否安装成功 xff08 如果已安装 xff0c 清忽略 xff09 git version 安装deepin win
  • touchgfx 浮点数显示

    最近在研究touchgfx xff0c 太懵了 xff0c 也就好久没有更新博文了 xff0c 很坑的一点 xff0c 我就想在屏幕上显示一个小数 xff0c 翻看了N多的博文 xff0c 没一个管用的 xff0c 这里分享一下我的方案 选
  • 浅谈专线(SD-WAN)

    存在就一定有存在的道理 xff0c 今天要说的网络知识点是专线 我们一步步来 xff0c 先说专线是什么 xff0c 然后说专线的特性 xff0c 最后说专线的未来 一 什么是专线 专线就是专门分的线路 xff0c 是运营商为企业客户分配的
  • Ubuntu18系统设置自定义分辨率1920*1080

    一般安装完unbuntu后会发现系统分辨率没有19201080 xff0c 需要手动自定义添加19201080分辨率 打开终端 xff0c 输入命令 xff1a xrandr xff0c 可以查看系统所有分辨率 输入命令生成显示 xff1a
  • 基于饿了么骨架屏方案,使用Chrome扩展程序生成网页骨架屏

    前言 之前写移动端项目的时候 xff0c 使用骨架屏来解决首屏渲染时出现短暂空白现象 xff0c 采用了就是饿了么page skeleton webpack plugin方法 但是page skeleton webpack plugin需要