【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


小结


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


写在最后


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

技术交流群请到这里来

相关文章
|
存储 前端开发 定位技术
前端加载超大图片实现秒开解决方案
前端加载超大图片实现秒开解决方案
|
3月前
|
存储 网络协议 文件存储
技术心得:图片存储方案
技术心得:图片存储方案
47 0
|
3月前
|
开发者 UED 容器
与传统的块级和行内布局相比,Flexbox为Web开发者提供了更加灵活、高效的布局方式
【6月更文挑战第10天】Flexbox是CSS3的弹性盒子布局,提供灵活、高效的网页布局解决方案。其特点包括灵活性、响应式和易理解,能适应不同屏幕尺寸和设备。核心概念有容器和项目,常用于导航栏、卡片布局、响应式设计、表格和表单布局。关键属性如flex-direction定义主轴方向,justify-content和align-items控制对齐,flex属性处理伸缩,order调整顺序。通过响应式设计和兼容性考虑,Flexbox助力创建优质、适应性强的Web界面。
34 0
|
4月前
|
机器学习/深度学习 编解码 API
视觉智能平台常见问题之分割后的图片尺寸会变得比较大如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
阿里云最新产品手册整体介绍——产品大图
阿里云最新产品手册整体介绍——产品大图自制脑图
184 2
|
编解码 网络协议 安全
GB28181智能安全帽方案探究及技术实现
GB28181智能安全帽方案探究及技术实现
226 0
|
存储 Web App开发 编解码
智能存储HEIC&AVIF图片硬件压缩方案详解
图片格式的进化一图抵千文,因此很多的应用都会用图片来表现丰富的内容。提起图片格式,大家耳熟能详的有JPEG,PNG,WEBP等等,这也是当前互联网上主流的图片格式,然而在过去的十年,随着技术的发展,图片的压缩技术又取得了长足的进步,新的图片格式已经涌现,使用这些传统的图片格式已经不再是最优的选择。在过去的10年移动互联网快速发展,使网络速度越来越快,但是手机的摄像头分辨率也越来越高,用户手机的UG
1503 0
智能存储HEIC&AVIF图片硬件压缩方案详解
|
Android开发
“千变万化”——神奇的Android图片规格调整器(功能梳理篇)
由于放假的缘故,还是没时间直接上手APP,所以趁着晚上有时间,不妨为“千变万化”APP梳理一下功能。这样也能为我构思该APP提供更好的设计方向,防止出现想到一处写一处的混乱情况。
150 0
|
存储 固态存储 算法
SSD写放大的优化策略要有统一标准了吗?
写放大WAF是NAND-based SSD寿命消耗的关键参数,WAF越大,寿命消耗越快,越接近1,则寿命消耗越慢,也是最理想的情况。 所以,为了让SSD的WAF写放大系数接近1,这些年,各种方案也被提出来。
|
Web App开发 移动开发 编解码
移动端法门:自适应方案和高清方案
笔者从毕业开始做前端到现在,90% 的项目是移动端打交道,所以当简历上写了“移动H5”几个字时,必会被问到自适应方案与高清方案
748 0
移动端法门:自适应方案和高清方案