【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


小结


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


写在最后


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

技术交流群请到这里来

相关文章
|
数据安全/隐私保护 块存储
|
13天前
|
Rust 关系型数据库 Linux
如何发布具有超高性能的地图服务
如何发布具有超高性能的地图服务
|
3月前
|
存储 网络协议 文件存储
技术心得:图片存储方案
技术心得:图片存储方案
47 0
|
4月前
|
机器学习/深度学习 编解码 API
视觉智能平台常见问题之分割后的图片尺寸会变得比较大如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
4月前
|
机器学习/深度学习 人工智能 算法
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
在音视频领域,把已经发布的混音歌曲或者音频文件逆向分离一直是世界性的课题。音波混合的物理特性导致在没有原始工程文件的情况下,将其还原和分离是一件很有难度的事情。 言及背景音人声分离技术,就不能不提Spleeter,它是一种用于音频源分离(音乐分离)的开源深度学习算法,由Deezer研究团队开发。使用的是一个性能取向的音源分离算法,并且为用户提供了已经预训练好的模型,能够开箱即用,这也是Spleeter泛用性高的原因之一,关于Spleeter,请移步:[人工智能AI库Spleeter免费人声和背景音乐分离实践(Python3.10)](https://v3u.cn/a_id_305),这里
免费背景音人声分离解决方案MVSEP-MDX23,足以和Spleeter分庭抗礼
|
编解码 网络协议 安全
GB28181智能安全帽方案探究及技术实现
GB28181智能安全帽方案探究及技术实现
222 0
|
存储
《阿里云存储手册》——存储产品大图
《阿里云存储手册》——存储产品大图
148 0
|
XML 传感器 移动开发
实现一个360全景的N种方案
手把手教你实现360全景浏览效果。
实现一个360全景的N种方案
|
存储 Web App开发 编解码
智能存储HEIC&AVIF图片硬件压缩方案详解
图片格式的进化一图抵千文,因此很多的应用都会用图片来表现丰富的内容。提起图片格式,大家耳熟能详的有JPEG,PNG,WEBP等等,这也是当前互联网上主流的图片格式,然而在过去的十年,随着技术的发展,图片的压缩技术又取得了长足的进步,新的图片格式已经涌现,使用这些传统的图片格式已经不再是最优的选择。在过去的10年移动互联网快速发展,使网络速度越来越快,但是手机的摄像头分辨率也越来越高,用户手机的UG
1496 0
智能存储HEIC&AVIF图片硬件压缩方案详解
|
存储 Java 应用服务中间件
图片存储方案介绍---七牛云存储
图片存储方案介绍---七牛云存储
图片存储方案介绍---七牛云存储