`

js实现网页图片延时加载的原理和代码

阅读更多

 

大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页

 

 

大家如果使用firebug去查看的话就会发现,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对于比较长的页面来说,这个方案是比较好的。
实现原理
把所有需要延时加载的图片改成如下的格式:

  1. < img   lazy_src = "图片路径"   border = "0" />  

 

 

然后在页面加载时,把所有使用了lazy_src的图片都保存到数组里,然后在滚动时计算可视区域的top,然后把延时加载的图片中top小于当前可视区域(即图片出现在可视区域内)的图片的src的值用lazy_src的来替换(加载图片)
代码

 

 

  1. lazyLoad=( function () {   
  2. var  map_element = {};   
  3. var  element_obj = [];   
  4. var  download_count = 0;   
  5. var  last_offset = -1;   
  6. var  doc_body;   
  7. var  doc_element;   
  8. var  lazy_load_tag;   
  9. function  initVar(tags) {   
  10. doc_body = document.body;   
  11. doc_element = document.compatMode ==  'BackCompat'  ? doc_body: document.documentElement;   
  12. lazy_load_tag = tags || [ "img" "iframe" ];   
  13. };  
  14.  
  15.    
  16. function  initElementMap() {   
  17. var  all_element = [];   
  18. //从所有相关元素中找出需要延时加载的元素   
  19. for  ( var  i = 0,   
  20. len = lazy_load_tag.length; i < len; i++) {   
  21. var  el = document.getElementsByTagName(lazy_load_tag[i]);   
  22. for  ( var  j = 0,   
  23. len2 = el.length; j < len2; j++) {   
  24. if  ( typeof (el[j]) ==  "object"  && el[j].getAttribute( "lazy_src" )) {   
  25. element_obj.push(all_element[key]);   
  26. }   
  27. }   
  28. }   
  29.    
  30. for  ( var  i = 0,   
  31. len = element_obj.length; i < len; i++) {   
  32. var  o_img = element_obj[i];   
  33. var  t_index = getAbsoluteTop(o_img);  
  34. //得到图片相对document的距上距离   
  35. if  (map_element[t_index]) {   
  36. map_element[t_index].push(i);   
  37. else  {   
  38. //按距上距离保存一个队列   
  39. var  t_array = [];   
  40. t_array[0] = i;   
  41. map_element[t_index] = t_array;   
  42. download_count++; //需要延时加载的图片数量   
  43. }   
  44. }   
  45.    
  46. };   
  47. function  initDownloadListen() {   
  48. if  (!download_count)  return ;   
  49. var  offset = (window.MessageEvent && !document.getBoxObjectFor) ? doc_body.scrollTop: doc_element.scrollTop;   
  50. //可视化区域的offtset=document的高+   
  51. var  visio_offset = offset + doc_element.clientHeight;   
  52. if  (last_offset == visio_offset) {   
  53. setTimeout(initDownloadListen, 200);   
  54. return ;   
  55. }   
  56. last_offset = visio_offset;   
  57. var  visio_height = doc_element.clientHeight;   
  58. var  img_show_height = visio_height + offset;   
  59. for  ( var  key  in  map_element) {   
  60. if  (img_show_height > key) {   
  61. var  t_o = map_element[key];   
  62. var  img_vl = t_o.length;   
  63. for  ( var  l = 0; l < img_vl; l++) {   
  64. element_obj[t_o[l]].src = element_obj[t_o[l]].getAttribute( "lazy_src" );   
  65. }   
  66. delete  map_element[key];   
  67. download_count--;   
  68. }   
  69. }   
  70. setTimeout(initDownloadListen, 200);   
  71. };   
  72. function  getAbsoluteTop(element) {   
  73. if  (arguments.length != 1 || element ==  null ) {   
  74. return   null ;   
  75. }   
  76. var  offsetTop = element.offsetTop;   
  77. while  (element = element.offsetParent) {   
  78. offsetTop += element.offsetTop;   
  79. }   
  80. return  offsetTop;   
  81. }   
  82. function  init(tags) {   
  83. initVar(tags);   
  84. initElementMap();   
  85. initDownloadListen();   
  86. };   
  87. return  {   
  88. init: init   
  89. }   
  90. })();  

 

 

 

使用方法:把页面上需要延时加载的图片src改成为lazy_src,然后把上面的js放到body最后面,然后调用:lazyLoad.init();
调戏的方法可以使用firebug来查看一时图片是否是延时加载。
另外:
如果你的页面上存在有内容切换的栏目的话,可能在切换时切换的内容里的图片可能会不显示,处理的方法是在内容时单独图片加载处理,如:
///切换内容的代码…

 

  1. chlid.find( "img[init_src]" ).each( function (){   
  2. $( this ).attr( "src" ,$( this ).attr( "init_src" ));   
  3. $( this ).removeAttr( "init_src" );   
  4.    
  5. }); 

 

 

分享到:
评论

相关推荐

    图片延迟加载的jq

    图片延迟加载是一种优化网页性能的技术,它通过只加载视口内的图片来减少页面初始化时的数据传输量,提高页面加载速度,提升用户体验。在本场景中,我们关注的是使用jQuery库实现这一功能的jQuery.lazyload插件。 ...

    js lazyload实现网页图片延迟加载特效

    本文将详细讲解如何使用 JavaScript 实现网页图片的延迟加载特效。 首先,我们需要理解延迟加载的工作原理。传统的网页加载方式是当页面加载时,所有图片都会立即请求并显示。然而,如果一个页面包含大量图片,这将...

    网页图片延迟加载插件

    在提供的压缩包"网页图片延迟加载插件.rar"中,很可能包含了实现延迟加载的JavaScript文件、示例HTML文件和必要的CSS文件。这些文件可以作为学习和实践延迟加载技术的资源,你可以通过查看源代码了解其工作原理,并...

    jQuery实现滚动网页延时加载图片代码.rar

    "jQuery实现滚动网页延时加载图片代码.rar"提供的就是两个使用jQuery实现滚动延时加载图片的示例。 滚动延时加载的主要原理是:当用户滚动页面,只有当图片出现在视口范围内时,才真正请求图片数据并显示。这样可以...

    js页面图片延迟加载特效.zip

    在网页设计中,提高用户体验和...总结来说,"js页面图片延迟加载特效"是一种高效优化网页加载速度的技术,通过JavaScript实现,能显著提升用户体验。通过理解和应用这些知识点,开发者可以创建更流畅、响应更快的网页。

    JS实现图片延迟加载(缓冲),非常实用

    在网页设计中,图片延迟加载(也称为懒加载)是一种优化技术,用于提高网页加载速度和用户体验。当用户滚动页面时,只有当前可视区域内的图片才会被加载,而不是一次性加载所有图片。这样可以减少初次加载页面时的...

    js实现图片预加载.tx

    这种技术可以有效避免用户在浏览过程中遇到的图片延迟加载问题,从而提升网页的整体响应速度和用户体验。预加载的关键在于预测用户下一步可能访问的图片,并提前加载这些图片到本地缓存中,以便于当用户实际访问时...

    图片延迟加载插件

    综上所述,“图片延迟加载插件”涉及到了网页性能优化、JavaScript编程、事件处理、数据属性的使用、浏览器API、动画效果的实现等多个方面的技术知识。通过深入理解和实践,我们可以提升网页的加载速度和用户体验。

    jquery页面延迟加载技术实现源代码

    本篇文章将深入探讨jQuery实现页面延迟加载的技术原理,并提供两个源码实例:`JqueryLazyLoad.rar`和`LazyLoad.rar`。 ### 1. jQuery延迟加载基本原理 页面延迟加载的核心思想是利用浏览器的滚动事件,判断元素...

    js实现多张图片延迟加载效果

    在JavaScript中,延迟加载(Lazy Loading)是一种优化网页性能的技术,它允许图片在用户滚动到可视区域时才开始加载,而不是在页面加载时一次性加载所有图片。这有助于减少页面初始加载时间,提升用户体验,特别是...

    lazyload.js实现图片异步延迟加载

    `lazyload.js`是一个轻量级、高性能的JavaScript库,专门用于实现图片和其他元素的延迟加载。它具有以下特点: - **简单易用**:只需几行代码即可集成到项目中。 - **兼容性好**:支持所有现代浏览器,包括IE9及...

    图片延迟加载技术

    图片延迟加载技术是一种优化...综上所述,图片延迟加载技术是通过jQuery等工具实现的一种网页优化策略,旨在提高页面加载速度和用户体验。通过合理的设计和实施,它可以有效减少不必要的数据传输,使网页加载更加高效。

    仿照手机淘宝网站图片延时加载

    1. **JavaScript库**:有许多开源的JavaScript库可以帮助开发者实现图片延时加载,如`lozad.js`、`lazysizes`等。这些库提供了便捷的API,只需少量代码即可快速集成。 2. **CSS属性**:利用CSS属性如`object-fit`和...

    类似淘宝图片加载JS代码 可以减少服务器负担

    本篇文章将深入探讨“类似淘宝图片加载JS代码”的工作原理和实现方式,帮助你理解如何通过前端技术优化图片加载,提升网站性能。 1. **延迟加载(Lazy Loading)** - 延迟加载是一种优化策略,它只在用户滚动到...

    jquery图片延迟加载

    ### 一、jQuery图片延迟加载原理 图片延迟加载的核心思想是,当图片不在浏览器的可视区域内时,不加载图片数据,而是只加载图片的基础信息,如HTML结构。当用户滚动页面,图片即将进入可视区域时,才开始加载图片。...

    图片延迟加载,lazyload.js使用实例

    `lazyload.js` 是一个实现图片延迟加载的JavaScript库,它的特点是轻量级且易于使用,没有多余的代码,使得开发者能够快速地集成到项目中。在本文中,我们将深入探讨`lazyload.js`的工作原理、使用方法以及如何在...

    jquery Loading图片延迟加载特效.zip

    总之,jQuery Loading图片延迟加载特效是一种有效的性能优化手段,它结合了jQuery的便利性和JavaScript的动态特性,实现了图片在需要时才加载,从而提升了网页加载速度和用户体验。对于图片相册类的应用,这种特效...

    js图片延迟加载 一个很好的例子

    在本文中,我们将深入探讨JavaScript图片延迟加载的工作原理、实现方法以及它如何提高用户体验。 首先,理解图片延迟加载的核心概念。在传统的网页加载过程中,所有图片都会在页面加载时一次性下载,这可能导致页面...

    图片根据鼠标滚动延时加载

    一、延迟加载原理 传统的网页加载方式是在页面加载时一次性加载所有资源,包括图片。然而,当页面中包含大量图片时,这可能导致页面加载时间过长,用户体验下降。延迟加载则只加载用户当前视口范围内的图片,当用户...

Global site tag (gtag.js) - Google Analytics