最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 基于饿了么骨架屏方案,使用Chrome扩展程序生成网页骨架屏

    正文概述 掘金(落落落洛克)   2021-03-10   711

    前言

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

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

    效果图

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

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

    如何使用

    插件参数

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

    骨架屏原理

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

    • 如何辨别容器和块
    • css冗余样式和冗余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结构处理

    我的前端学习笔记?

    最近花了点时间把笔记整理到语雀上了,方便童鞋们阅读

    • 我的前端学习笔记?

    总结

    • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注?
    • 本文首发于掘金,未经许可禁止转载?

    起源地下载网 » 基于饿了么骨架屏方案,使用Chrome扩展程序生成网页骨架屏

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元