仿百亿补贴,H5 中图片先模糊后清晰的效果如何实现

逛过拼多多百亿补贴的同学,可能有一个体会,那就是图片加载非常快,很多图片瞬间就出现了,这是为什么呢?

答案是:百亿补贴先加载了一张模糊小图、再加载了一张清晰大图,用户很难感知到模糊到清晰的过程,误以为图片加载很快。

接下来我会先给出证据、再分析原理、提供关键代码,之后给百亿补贴的方法做扩展、补充,最后做一个简单总结。

当然,图片优化涉及知识很琐碎、广泛,先模糊小图后清晰大图只是其中一种手段,百亿补贴肯定还使用了其他技术。 如果朋友你想了解更多相关手段,可以点赞关注我。

拳打 H5,脚踢小程序。我是「小霖家的混江龙」,关注我,带你了解更多实用的 H5、小程序武学。

证据

我们可以有三个证据,可以证明:百亿补贴是先加载模糊小图,再加载清晰大图。

第一个证据:我们可以在控制台把网络调整成 Slow 3G,然后强制刷新浏览器,可以看到拼多多的图片,存在一个模糊到清晰的过程。

第二个证据:我们在控制台查看网络请求,可以看到请求中有一张小商品图、一张大商品图。

第三个证据:我们在控制台找到图片元素,可以看到图片元素是一个 a 标签包裹着一个 img 标签。其中 a 标签的 background-image 是模糊小图链接,img 标签的 src 是清晰大图链接。

原理及代码

要想知道先模糊、后清晰的原理,我们得先看一张 img 标签是如何加载图片的,如下所示:开始时 img 占据的区域为空白,随着图片的逐步加载,空白部分被慢慢填充。

准确地说,img 标签占据的区域,不是「空白」而是「透明」。这意味着,我们只需要给 img 标签设置一张模糊小图链接,给 img 标签的 src 设置清晰大图链接,当大图慢慢加载时,清晰图片会一步步遮挡住模糊图片,从而实现模糊到清晰的效果。

关键代码如下,非常简单:

html 复制代码
<div class="box">
  <a class="small-img">
    <img
      class="large-img"
      src="大图链接"
    />
  </a>
</div>
css 复制代码
.box {
  position: relative;
}
.small-img {
  position: absolute;
  background-image: url("小图链接");
  background-size: cover;
  background-position: unset;
}
.large-img {
  width: ...;
  height: ...;
}

获取小图链接也很简单,现在各大云服务商基本都提供了方法。比如 阿里云 只需要在图片 CDN 链接后面拼接一些参数,就可以得到图片缩放的小图。

更进一步,加模糊滤镜

百亿补贴的做法,对于电商活动 H5 已经足够。但更讲究氛围感的 H5,也许会觉得百亿补贴的效果很粗糙。针对这种 H5,我们可以更进一步,给小图加上模糊滤镜,等到大图加载完成时再去除模糊滤镜,并增加 transition 的过渡效果,就得到如下效果:

关键代码为:

css 复制代码
.small-img {
  ...
  filter: blur(20px);
  transition: all .5s ease-in-out;
}
.loaded {
  filter: blur(0);
}
js 复制代码
const small = document.querySelector('.small-img')
const large = document.querySelector('.large-img')

large.onload = function () {
  small.classList.add('loaded')
}

总结

本文分析了百亿补贴图片加载非常快的主要原因:先加载模糊小图,再加载清晰大图。并给出了关键证据,以及实现原理和代码。最后在百亿补贴方法的基础上,增加模糊滤镜,实现了更有氛围感的效果。

拳打 H5,脚踢小程序。我是「小霖家的混江龙」,关注我,带你了解更多实用的 H5、小程序武学。

相关推荐
qiyi.sky7 分钟前
JavaWeb——Vue组件库Element(3/6):常见组件:Dialog对话框、Form表单(介绍、使用、实际效果)
前端·javascript·vue.js
煸橙干儿~~11 分钟前
分析JS Crash(进程崩溃)
java·前端·javascript
安冬的码畜日常20 分钟前
【D3.js in Action 3 精译_027】3.4 让 D3 数据适应屏幕(下)—— D3 分段比例尺的用法
前端·javascript·信息可视化·数据可视化·d3.js·d3比例尺·分段比例尺
l1x1n01 小时前
No.3 笔记 | Web安全基础:Web1.0 - 3.0 发展史
前端·http·html
昨天;明天。今天。1 小时前
案例-任务清单
前端·javascript·css
zqx_72 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己3 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称3 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色3 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
NiNg_1_2343 小时前
npm、yarn、pnpm之间的区别
前端·npm·node.js