【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


小结


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


写在最后


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

技术交流群请到这里来

相关文章
|
22天前
|
存储 移动开发 数据库
视觉智能开放平台产品使用合集之人脸数据库容量是否支持扩容
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
|
3月前
|
存储 网络协议 文件存储
技术心得:图片存储方案
技术心得:图片存储方案
50 0
|
4月前
|
存储 缓存 前端开发
性能优化:通用快照方案
性能优化对于提供卓越的用户体验至关重要,钉钉终端团队特别关注用户体验。我们团队采用了一系列创新的性能优化措施,显著提升了首次有意义绘制(FMP)和首次内容绘制(FCP)的性能指标。其中,利用快照方案,结合用户的本地存储能力,我们能够进一步提高页面性能。快照方案是在完成常规手段前端优化(如优化首屏加载体积、实施懒加载、渲染优化和缓存提升等)和资源离线处理之后的又一重要步骤,旨在更迅速地向用户展示页面内容。
106 1
|
4月前
|
机器学习/深度学习 编解码 API
视觉智能平台常见问题之分割后的图片尺寸会变得比较大如何解决
视觉智能平台是利用机器学习和图像处理技术,提供图像识别、视频分析等智能视觉服务的平台;本合集针对该平台在使用中遇到的常见问题进行了收集和解答,以帮助开发者和企业用户在整合和部署视觉智能解决方案时,能够更快地定位问题并找到有效的解决策略。
|
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智能安全帽方案探究及技术实现
229 0
|
存储
《阿里云存储手册》——存储产品大图
《阿里云存储手册》——存储产品大图
149 0
|
存储 Web App开发 编解码
智能存储HEIC&AVIF图片硬件压缩方案详解
图片格式的进化一图抵千文,因此很多的应用都会用图片来表现丰富的内容。提起图片格式,大家耳熟能详的有JPEG,PNG,WEBP等等,这也是当前互联网上主流的图片格式,然而在过去的十年,随着技术的发展,图片的压缩技术又取得了长足的进步,新的图片格式已经涌现,使用这些传统的图片格式已经不再是最优的选择。在过去的10年移动互联网快速发展,使网络速度越来越快,但是手机的摄像头分辨率也越来越高,用户手机的UG
1506 0
智能存储HEIC&AVIF图片硬件压缩方案详解
|
存储 Java 应用服务中间件
图片存储方案介绍---七牛云存储
图片存储方案介绍---七牛云存储
图片存储方案介绍---七牛云存储