【SSD系列】图片作为背景的闪白问题,6种基础方案, 不会不知道吧

简介: 关于【SSD系列】:前端一些有意思的内容,旨在3-10分钟里, 500-1500字,有所获,又不为所累。某天,发现有背景图片的弹出框,会出现闪白现象,这,兄弟们,你们说能忍么?答案:不能!

4.JPG


前言


关于【SSD系列】:


前端一些有意思的内容,旨在3-10分钟里, 500-1500字,有所获,又不为所累。

某天,发现有背景图片的弹出框,会出现闪白现象,这,兄弟们,你们说能忍么?

答案:不能!


思路


思路嘛,无非三种


  1. 弹框时或者显示时,背景图片已经ready
  2. 背景色或者小图,先顶着,大背景图ready后切换
  3. 尽可能的快


这里暂且不考虑缓存,因为你无论如何逃不过第一次加载。


方案


可以到 背景图片闪现空白解决方案 看到各种方案演示。


为了提升大家兴趣,先看个png, jpg渐进和png交错的加载效果动图


1.JPG


方便移动端观看,列一个演示清单:



方案1 base64


如果背景图片相对小,或者你执意要这嘛做,图片转为bas464,存到css或者html里面。


演示: 背景图片闪现空白方案-base背景图片


不足: base64增加带宽成本,内容会比原本大至少1/3。 至于为什么可参见 前端Base64编码知识,一文打尽,探索起源,追求真相。


方案2 prefetch


<link rel="prefetch" ></link>
复制代码
<link rel="prefetch" href="./img/bg-huoluo.jpg"/>   
    .bg {
        background-image:url("./img/bg-huoluo.jpg");
        background-size: contain;
    }
复制代码


prefetch是对浏览器的暗示,暗示将来可能需要某些资源,但由浏览器决定是否加载以及什么时候加载这些资源。 优先级低。


pre家族:preload, prefetch, dns-prefetch, preconnect, prerender。


有人可能会问,干嘛不用preload。 呵呵, 你说呢?


演示: 背景图片闪现空白方案-preferch


方案3 创建隐藏Img节点


<img src="./img/bg-huoluo.jpg" alt="" title="" style="display: none"/>
    .bg {
        background-color: #2D2C27;
        background-image: url(./img/bg-huoluo.jpg);
        background-size: contain;
    }
复制代码

这方案好理解,图片已经请求下载啦。 其实不能解决首屏背景图片的问题。

演示:背景图片闪现空白方案-创建隐藏Img节点


方案4 等待图片加载完毕再显示弹框


let dg = null;
        function createDialog() {
            onImageLoad('./img/bg-huoluo.jpg').then(src => {
                if (!dg) {
                    dg = document.createElement('div');
                    dg.className = "bg";
                    dg.style.backgroundImage = `url(${src})`;
                    dg.id = "dialog";
                    dg.innerHTML = `
                <div class="content">我爱赫萝!!!!</div>
            `
                    document.body.appendChild(dg);
                }
            })
        }
        function onImageLoad(src) {
            return new Promise((resolve, reject) => {
                let img = new Image();
                img.src = src;
                img.onload = function () {
                    resolve(src)
                }
                img.onerror = reject
            })
        }
复制代码


当然这是有明显问题的,你不能因为一个背景图片而让内容无法正常展现。

当然你可以有修正方案。


演示: 背景图片闪现空白方案-等待图片加载完毕再显示弹框


方案5 同时设置背景颜色和图片


.bg {
            background-color:#433F34;
            background-size: contain;
        }
        .bg-new{
            background-image: url(./img/bg-huoluo.jpg)
        }
复制代码


这样,背景图片加载上的时候,不会有明显的闪白效果。 当然要是背景图片,五颜六色,估计有点为难客官啦。


演示: 背景图片闪现空白方案-同时设置背景颜色和图片


方案6 jpg使用渐进模式,png使用交错模式


这两种模式共同的作用就是,你不必完整的下载完毕图片,就可以看到图片的内容了。

打个比方, 1M的图片,你可能只需下载不到100Kb,就已经能相对清晰的看到图片了。

演示: png正常,png交错,jpg渐进


方案7 小图过度方案


显示loading图片或者小图,完毕后再换大图。 这种方案常用语封面,商品图标等等场景,背景图也可以借鉴其思路。


其他可参考方案


  • webp格式,减少图片大小
  • css spirte, 减少http开销,同时让其早被加载
    css spirte + prefech 可以秀一波
  • jpg格式图片压缩
  • 图片cdn
  • 多域名
  • 背景图片切割,能repeat就repeat


小结


是不是很简单,一切都看起来没那么难,这样,你才容易入坑啊。


写在最后


写作不易,你的一赞一评就是我前行的最大动力。

技术交流群请到这里来

相关文章
|
4月前
|
人工智能 移动开发 文字识别
视觉智能开放平台产品使用合集之如何对视频流进行实时分割背景,和替换背景
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
1月前
|
机器学习/深度学习 编解码 算法
了解与对比主流背景去除工具
本文对比了几款主流的背景去除工具,包括Remove.bg、Removal.ai、RMBG 2.0、Imagga和Wondershare Pixcut,重点介绍了RMBG 2.0这款开源工具的性能、优势及挑战,适用于不同需求的用户选择。
|
6月前
|
存储 网络协议 文件存储
技术心得:图片存储方案
技术心得:图片存储方案
81 0
|
6月前
|
Java 机器人 Linux
01. 【Android教程】系统背景及结构概述
01. 【Android教程】系统背景及结构概述
51 0
在图片上停留时逐渐增强或减弱的透明效果demo效果示例(整理)
在图片上停留时逐渐增强或减弱的透明效果demo效果示例(整理)
|
7月前
|
机器学习/深度学习 人工智能 算法
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件的情况下,将其还原和分离是一件很有难度的事情。 言及背景音人声分离技术,就不能不提Spleeter,它是一种用于音频源分离(音乐分离)的开源深度学习算法,由Deezer研究团队开发。使用的是一个性能取向的音源分离算法,并且为用户提供了已经预训练好的模型,能够开箱即用,这也是Spleeter泛用性高的原因之一,关于Spleeter,请移步:[人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)](https://v3u.cn/a_id_305),这里
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
|
存储 Web App开发 编解码
智能存储HEIC&AVIF图片硬件压缩方案详解
图片格式的进化一图抵千文,因此很多的应用都会用图片来表现丰富的内容。提起图片格式,大家耳熟能详的有JPEG,PNG,WEBP等等,这也是当前互联网上主流的图片格式,然而在过去的十年,随着技术的发展,图片的压缩技术又取得了长足的进步,新的图片格式已经涌现,使用这些传统的图片格式已经不再是最优的选择。在过去的10年移动互联网快速发展,使网络速度越来越快,但是手机的摄像头分辨率也越来越高,用户手机的UG
1653 0
智能存储HEIC&AVIF图片硬件压缩方案详解
【图片操作】混合图片
混合图片的方式有很多种,我们先来看看如何通过混合图片的通道来实现图片混合。
155 0
|
存储 物联网 C语言
LittlevGL图形框架扩展 - JPEG图片的支持
在轻量级RTOS GUI图形库中,LittlevGL是一个使用C语言开发,开源免费的GUI,支持触摸屏,鼠标,键盘多种操作,移植简单方便,在丰富的控件基础上还可以自定义控件,开发者一直在不断完善更新,相对于其他GUI,LittlevGL在硬件资源不足(RAM < 100kbytes)的情况下存在较大的优势,在240*240的显示屏上显示一张图片,RAM缓冲区设置为2Kbytes即可。AliOS Things 目前最新版本已经集成LittlevGL,并且在智能穿戴设备项目上已商用。
411 15
LittlevGL图形框架扩展 - JPEG图片的支持
|
存储 NoSQL 架构师
架构视角-文件的通用存储原理
架构师是互联网行业高薪又紧俏的资源。成为架构师最基本的是设计能力。设计与设计的区别主要体现在两方面: 1,深度:要解决哪些问题?这个问题背后的根本问题是什么?还有什么问题没有发现?对应的能力是发现和解决问题的能力。 2,体系:要解决的问题的属于哪一类的问题?这类问题能否进一步抽象,让系统解决更大的问题?对应的抽象归纳和体系化思维的能力。
架构视角-文件的通用存储原理