Javascript实现图片加载从模糊到清晰显示的方法


Posted in Javascript onJune 21, 2016

1.背景介绍

在网络相册应用中用户查看照片是最朴素的需求,当网络比较慢的时候查看照片等待的时间是比较长的,用户体验会很差。

2.现状

现在加载照片的方法主要有一下两种:
(1)最原始的方式在html页面直接用img标签加载显示照片。该方法在网络速度比较慢或者要显示的照片比较大的时候会页面出现空白的等待过程,并且不能开始给用户看到照片大概的情况,用户体验比较不好
(2)在html页面先用img标签加载显示照片的缩略图,同时用javascript隐藏的加载照片的原图,等照片大图加载完成后再将原图显示到页面中。以下是流程图:

Javascript实现图片加载从模糊到清晰显示的方法

3.我们的解决方案

QQ相册最近做的一些优化方法解决了上诉两个方法的缺点和满足了用户查看照片的需求:第一时间看到照片大概情况和尽可能快的看到清晰的原图。该方法使用缩略图和原图同时加载并叠加显示,先加载缩略图并拉大显示,大图叠加在缩略图上面同时加载。缩略图很小通常很快就能给用户看到照片模糊的效果,大图加载过程中从上往下逐步覆盖缩略图,这样用户就可以看到加载过程中的大图。

(1)示例图

Javascript实现图片加载从模糊到清晰显示的方法

如上如所示,本方法的处理步骤是:
1).获取照片缩略图和原图的URL,获取照片的长和宽;
2).加载并显示照片缩略图,将缩略图按照片的长和宽拉伸显示,这时用户看到的是模糊的效果;
3).加载并显示照片原图,将原图叠加在缩略图上面显示,原图加载多少就显示多少,没有加载的还是显示缩略图,逐步将缩略图覆盖掉,原图在加载的过程中用户看到的是照片从模糊到清晰的渐变效果。
4).原图加载完后,原图已经全部将缩略图覆盖,这时用户看到的是真实的原图。此时可以隐藏缩略图防止缩略图干扰PNG或GIF等有透明效果的图片显示。

(2)示例代码

<!--设置照片的大小-->
<div style="width:400px;height:300px;">
    <!--小图拉大显示-->
    <img src="small_url" style="width:100%;height:100%;"/>
    <!--原图叠加在小图上面-->
    <img src="big_url" style="width:100%;height:100%;position:absolute;top:0px;left:0px;"/>
</div>

以上就是本文的全部内容,了解更多JavaScript的语法,大家可以查看:《JavaScript 参考教程》、《JavaScript代码风格指南》,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS控制阿拉伯数字转为中文大写示例代码
Sep 04 Javascript
js如何打印object对象
Oct 16 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 Javascript
AngularJs定时器$interval 和 $timeout详解
May 25 Javascript
JS设置手机验证码60s等待实现代码
Jun 14 Javascript
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
ReactJs实现树形结构的数据显示的组件的示例
Aug 18 Javascript
浅谈node的事件机制
Oct 09 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
Aug 17 Javascript
Mpvue中使用Vant Weapp组件库的方法步骤
May 16 Javascript
JavaScript工具库之Lodash详解
Jun 15 Javascript
解决VUE双向绑定失效的问题
Oct 29 Javascript
Javascript类型系统之String字符串类型详解
Jun 21 #Javascript
JS模仿腾讯图片站的图片翻页按钮效果完整实例
Jun 21 #Javascript
JS实现简单的右下角弹出提示窗口完整实例
Jun 21 #Javascript
jQuery获取元素父节点的方法
Jun 21 #Javascript
JS图片定时翻滚效果实现方法
Jun 21 #Javascript
Javascript删除指定元素节点的方法
Jun 21 #Javascript
jQuery插件扩展测试实例
Jun 21 #Javascript
You might like
php结合飞信 免费天气预报短信
2009/05/07 PHP
提高PHP编程效率 引入缓存机制提升性能
2010/02/15 PHP
innerText和innerHTML 一些问题分析
2009/05/18 Javascript
遍历jquery对象的代码分享
2011/11/02 Javascript
jQuery制作仿腾讯web qq用户体验桌面
2013/08/20 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
javascript事件冒泡简单示例
2016/06/20 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
JS 实现缓存算法的示例(FIFO/LRU)
2018/03/20 Javascript
JavaScript new对象的四个过程实例浅析
2018/07/31 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
详解Vue.js v-for不支持IE9的解决方法
2018/12/29 Javascript
JavaScript数组特性与实践应用深入详解
2018/12/30 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
vux-scroller实现移动端上拉加载功能过程解析
2019/10/08 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
TypeScript之调用栈的实现
2019/12/31 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
Python利用字典将两个通讯录文本合并为一个文本实例
2018/01/16 Python
python如何使用unittest测试接口
2018/04/04 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
html svg生成环形进度条的实现方法
2019/09/23 HTML / CSS
HTML5 层的叠加的实现
2020/07/07 HTML / CSS
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
Saucony澳大利亚官网:美国跑鞋品牌,运动鞋中的劳斯莱斯
2018/05/05 全球购物
Java语言程序设计测试题判断题部分
2013/01/06 面试题
建筑行业的大学生自我评价
2013/12/08 职场文书
安全环保标语
2014/06/09 职场文书
物理教育专业求职信
2014/06/25 职场文书
单位租房协议书范本
2014/12/04 职场文书
5分钟教你docker安装启动redis全教程(全新方式)
2021/05/29 Redis