js实现图片的延迟加载
2011-05-27 15:51
549 查看
项目进展得差不多了,闲得蛋疼。开始关注各种高性能WEB技术。看到一篇博客说土豆网的图片是延迟加载的。原理是这样:页面可见区域以下的图片先不加载,等到用户向下滚动到图片位置时,再进行加载。这样做的好处在哪里?——当页面有好几屏内容时,有可能用户只看前几屏的内容,这样我们就可以只加载用户需要看的图片,减少服务器向用户浏览器发送图片文件所产生的负荷。于是我打开了土豆网,没发现它的这种功能。但是一想,这确实是挺有意思的。这跟人人网的分批加载新鲜事的有异曲同工之妙,于是想自己coding实现一下。以下是偶的HTML和JS——在IE下简单测试过了。
简单说下思路:先在<img>标签中将src的值设置为一个极小的图片文件路径,alt属性的值设置为真正要显示的图片文件路径,当向下滚动到图片的位置时,将src的值替换为alt的值,这样就会自动加载真正要显示的图片了,同时,给标签设置一个值为lazy的class,加载完了之后,将其值设置为notlazy,以此来判断哪些图片需要加载,哪些不需要。
代码中的注释已经很清楚了,各位自己慢慢看吧。欢迎扔砖,更欢迎各种改进和完善的建议。
注意事项:1、页面中用到了两个图片文件,读者自己随便找来两张即可。在此我就不提供了。
2、sprite.gif是从土豆网上下载的,地址:http://css.tudouui.com/skin/__g/img/sprite.gif 这是一张小到几乎没有的图片。
3、请不要指责页面太丑陋,这不是关键。
4、我之所以定义那两块比便便还难看的DIV,是想让效果更清晰地展现。可以清晰地看到,第二个div全部可见以后,再向下滚动大图片就会自动加载。
不知道CSDN这个文本编辑器怎么整的,把我的<script>标签加了一个mce前缀,我的<p></p>中间有N多 ,也被它清除了。大家copy的时候记得自己修改一下。
O了,我扯完淡了,大家继续。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>lazyImage2.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css" mce_href="styles.css">--> </head> <body style="text-align:center" mce_style="text-align:center"> <p> </p><p> </p><p> </p><p> </p><p> </p> <div style="height:1290px;width:800px;border:1px;background:gray;"></div> <div style="height:150px;width:800px;border:1px;background:green;"></div> <img class="lazy" src="images/sprite.gif" mce_src="images/sprite.gif" alt="images/lazyloadImg.jpg" /> <mce:script type="text/javascript"><!-- var temp = -1;//用来判断是否是向下滚动(向上滚动就不需要判断延迟加载图片了) window.onscroll = function() { var imgElements = document.getElementsByTagName("img"); var lazyImgArr = new Array(); var j = 0; for(var i=0; i<imgElements.length; i++) { if(imgElements[i].className == "lazy"){ lazyImgArr[j++] = imgElements[i]; } } var scrollHeight = document.body.scrollTop;//滚动的高度 var bodyHeight = document.body.offsetHeight;//body(页面)可见区域的总高度 if(temp < scrollHeight) {//为true表示是向下滚动,否则是向上滚动,不需要执行动作。 for(var k=0; k<lazyImgArr.length; k++) { var imgTop = lazyImgArr[k].offsetTop;//1305(图片纵坐标) if((imgTop - scrollHeight) <= bodyHeight) { lazyImgArr[k].src = lazyImgArr[k].alt; lazyImgArr[k].className = "notlazy" } } temp = scrollHeight; } }; // --></mce:script> </body> </html>
简单说下思路:先在<img>标签中将src的值设置为一个极小的图片文件路径,alt属性的值设置为真正要显示的图片文件路径,当向下滚动到图片的位置时,将src的值替换为alt的值,这样就会自动加载真正要显示的图片了,同时,给标签设置一个值为lazy的class,加载完了之后,将其值设置为notlazy,以此来判断哪些图片需要加载,哪些不需要。
代码中的注释已经很清楚了,各位自己慢慢看吧。欢迎扔砖,更欢迎各种改进和完善的建议。
注意事项:1、页面中用到了两个图片文件,读者自己随便找来两张即可。在此我就不提供了。
2、sprite.gif是从土豆网上下载的,地址:http://css.tudouui.com/skin/__g/img/sprite.gif 这是一张小到几乎没有的图片。
3、请不要指责页面太丑陋,这不是关键。
4、我之所以定义那两块比便便还难看的DIV,是想让效果更清晰地展现。可以清晰地看到,第二个div全部可见以后,再向下滚动大图片就会自动加载。
不知道CSDN这个文本编辑器怎么整的,把我的<script>标签加了一个mce前缀,我的<p></p>中间有N多 ,也被它清除了。大家copy的时候记得自己修改一下。
O了,我扯完淡了,大家继续。
相关文章推荐
- js简单实现图片延迟加载的方法
- 挨踢骑术 lazyload.js实现图片异步延迟加载
- 图片显示提高用户体验—JS实现—图片预加载,图片延迟加载
- jquery.scrollLoading-min.js实现图片延迟加载
- js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
- jquery.lazyload.js实现图片异步延迟加载
- Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
- jquery.lazyload.js 插件实现图片异步延迟加载
- 原生Js页面滚动延迟加载图片实现原理及过程
- jquery.lazyload.js实现图片延迟加载——wordpress图片随滚动条渐显效果
- JS实现图片的延迟加载
- lazyload.js实现图片延迟加载。
- Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
- Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
- JS实现网页图片延迟加载[随滚动条渐显]
- JS实现图片延迟加载并淡入淡出效果的简单方法
- jquery插件实现图片延迟加载(lazyload.js)
- JS实现图片延迟加载
- js图片延迟加载的实现方法及思路
- Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件