用过 Medium 的用户不会不记得它的图片加载方式——纯色-高斯模糊-加载完成并显示。
成都创新互联公司专注于渭南企业网站建设,响应式网站建设,成都商城网站开发。渭南网站建设公司,为渭南等地区提供建站服务。全流程按需策划,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
这是一种很优雅的图片预加载的方式(因为 Medium 的图片质量都很高,如果全部一下加载的话,需要的时间难以想象,所以,这是一种很棒的做法)。从***次打开 Medium 这个网站开始,我就被这种技术给吸引住了——好吧,直到今天才去研究它。
在 Medium 网站,打开任何一篇文章,然后,我们来 inspect 一下:
可以看到,Medium 为每一张图片都设置了这么长的一段 HTML。这样做的目的就是为了让这个图片的逐步加载过程能够平滑如一,同时还能在一定程度上提升用户体验。就算图片没有加载出来,显示给用户的是一个高斯模糊的图片,其实也不失美感。
那么,这个图片的逐步加载过程具体是什么样的呢?
以上就是 Medium 的做法。
我们可以自己来实现这个效果,实现过程如下:
所以,综合来看,其实并不复杂。
首先,我们可以把大图和小图的 URL 和尺寸都存起来,通过标签的 data 属性去动态获取。所以,我们的 HTML 可以像下面这样写:
其中各个参数代表的含义是:
同时,我们需要定义一些 CSS 的 class 来对大图和小图进行处理:
- .blur-img-container {
- position: relative;
- background: #eeeeee;
- background-size: cover;
- overflow: hidden;
- }
- .blur-img-container img {
- position: absolute;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- opacity: 0;
- transition: all 0.4s ease-in-out;
- }
- .blur-img-container .thumb-loaded {
- opacity: 1;
- filter: blur(10px);
- transform: scale(1);
- }
- .blur-img-container .large-loaded {
- opacity: 1;
- }
- .blur-img-container .thumb-hidden {
- opacity: 0;
- }
然后,我们的重点在于 JavaScript 的处理。
***点,动态设置我们的容器的 padding-bottom。可以通过计算宽高比然后换算成百分比:
- elem.style.paddingBottom = `${(realHeight / realWidth) * 100}%`;
第二点,使用图像的 onload 事件来控制加载的进度:
- let thumb = new Image();
- thumb.src = thumbSrc;
- thumb.onload = () => {
- // 小图加载完成,显示小图,设置样式
- setStyle(thumb, 'thumb-loaded');
- };
- elem.appendChild(thumb);
- let realImg = new Image();
- realImg.src = lgSrc;
- realImg.onload = () => {
- // 大图加载完成,显示大图,隐藏小图
- setStyle(realImg, 'large-loaded');
- setStyle(thumb, 'thumb-hidden');
- };
- // 将大图添加到页面中
- elem.appendChild(realImg);
其实,只要把上面两点主要的功能做好了,我们的这个效果基本上就实现了。
可以通过我的 GitHub Repo 来查看完整的源代码和例子 blur-image。
同时,我将这个小功能封装成了一个 package,需要的朋友可以通过 npm install blur-image 或者 bower install blur-image 进行安装和使用。具体的安装和使用方法可以查看文档。
新闻标题:使用高斯模糊的效果逐步加载图片(仿Medium)
当前地址:http://www.mswzjz.cn/qtweb/news29/231879.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能