http://tanglangrong2010.blog.163.com/blog/static/174796716201211282555345/

目前,主要的购物网站都采用了这种加载方式。今天在一个网友的站里发现一个图片延迟加载的插件,很好用,在这里介绍一下。 
先介绍一下图片延迟加载原理。我们需要先将图片的真实地址保存在一个自定义的属性中(属性名任你发挥吧,这里我用的是lazy-src),而图片的src属性中用一个占位图片来替代,这个占位图片当然是越小越好,它基本上只干活、不露面。

. 代码如下:

<img src="http://tanglangrong2010.blog.163.com/blog/images/placeholder.png" lazy-src="http://tanglangrong2010.blog.163.com/blog/images/realimg.jpg" alt="" /> 
<!-- 如果浏览器禁用了js,我们也不能不让网页显示图片撒,所以最好是加上下面一句备用代码 --> 
<noscript><img src="http://tanglangrong2010.blog.163.com/blog/images/realimg.jpg" alt="" /></noscript> 

首 先。页面开始加载时浏览器会获取所有图片在当前页面中的位置并缓存(获取offset的值时,页面的reflow会被引发),计算出可视区域,当图片的位 置出现在可视区域中,利用js动态地将图片标签中的src值替换成图片真实的地址,这时,刚刚出现在可视区域的图片便开始加载。 
其次。当用户向下滚动页面时,通过js再次计算是否有图片初次出现可视区域内,如果有,刚对这些图片的src值进行替换,并开始加载真实图片。为了避免重复操作引起的内存泄漏,需要在全部图片加载完后,卸载掉相应的触发事件。 
最后。本文是将整个窗口看成是一个大容器,如果愿意,也可以在页面中设置一个小容器,在小容器中也同样可以实现图片的延迟加载。原理虽然简单,但是应用是多样的。 
从下面的地址可以看到图片延迟加载的演示,不过尽量使用相应的工具(firebug、Fiddler2)监测图片延迟加载的效果。 
图片延迟加载插件的代码如下:

. 代码如下:

图片延迟加载插件代码 
(function( $ ){ 
$.fn.imglazyload = function( options ){ 
var o = $.extend({ 
attr : 'lazy-src', 
container : window, 
event : 'scroll', 
fadeIn : false, 
threshold : 0, 
vertical : true 
}, options ), 
event = o.event, 
vertical = o.vertical, 
container = $( o.container ), 
threshold = o.threshold, 
// 将jQuery对象转换成DOM数组便于操作 
elems = $.makeArray( $(this) ), 
dataName = 'imglazyload_offset', 
OFFSET = vertical ? 'top' : 'left', 
SCROLL = vertical ? 'scrollTop' : 'scrollLeft', 
winSize = vertical ? container.height() : container.width(), 
scrollCoord = container[ SCROLL ](), 
docSize = winSize + scrollCoord; 
// 延迟加载的触发器 
var trigger = { 
init : function( coord ){ 
return coord >= scrollCoord && 
coord <= ( docSize + threshold ); 
}, 
scroll : function( coord ){ 
var scrollCoord = container[ SCROLL ](); 
return coord >= scrollCoord && 
coord <= ( winSize + scrollCoord + threshold ); 
}, 
resize : function( coord ){ 
var scrollCoord = container[ SCROLL ](), 
winSize = vertical ? 
container.height() : 
container.width(); 
return coord >= scrollCoord && 
coord <= ( winSize + scrollCoord + threshold ); 

}; 
var loader = function( triggerElem, event ){ 
var i = 0, 
isCustom = false, 
isTrigger, coord, elem, $elem, lazySrc; 
// 自定义事件只要触发即可,无需再判断 
if( event ){ 
if( event !== 'scroll' && event !== 'resize' ){ 
isCustom = true; 


else{ 
event = 'init'; 

for( ; i < elems.length; i++ ){ 
isTrigger = false; 
elem = elems[i]; 
$elem = $( elem ); 
lazySrc = $elem.attr( o.attr ); 
if( !lazySrc || elem.src === lazySrc ){ 
continue; 

// 先从缓存获取offset值,缓存中没有才获取计算值, 
// 将计算值缓存,避免重复获取引起的reflow 
coord = $elem.data( dataName ); 
if( coord === undefined ){ 
coord = $elem.offset()[ OFFSET ]; 
$elem.data( dataName, coord ); 

isTrigger = isCustom || trigger[ event ]( coord ); 
if( isTrigger ){ 
// 加载图片 
elem.src = lazySrc; 
if( o.fadeIn ){ 
$elem.hide().fadeIn(); 

// 移除缓存 
$elem.removeData( dataName ); 
// 从DOM数组中移除该DOM 
elems.splice( i--, 1 ); 


// 所有的图片加载完后卸载触发事件 
if( !elems.length ){ 
if( triggerElem ){ 
triggerElem.unbind( event, fire ); 

else{ 
container.unbind( o.event, fire ); 

$( window ).unbind( 'resize', fire ); 
elems = null; 

}; 
var fire = function( e ){ 
loader( $(this), e.type ); 
}; 
// 绑定事件 
container = event === 'scroll' ? container : $( this ); 
container.bind( event, fire ); 
$( window ).bind( 'resize', fire ); 
// 初始化 
loader(); 
return this; 
}; 
})( jQuery ); 

有关这个的插件API说明如下: 
attr string 
存放图片真实地址的属性名,与HTML对应,默认是lazy-src。 
container dom & selector 
默认的容器为window,可自定义容器。 
event stirng 
触发图片加载的事件类型,默认为window.onscroll事件 
fadeIn boolean 
是否使用jQuery的fadeIn效果来显示,默认是false。 
threshold number 
页面滚动到离图片还有指定距离的时候就进行加载,默认是0。 
vertical boolean 
是否横向滚动,默认为true(纵向)。 
loadScript(增强版的功能) boolean 
是否无阻塞加载javascript广告图片,默认为false。

jquery图片延迟加载 lazy-src相关推荐

  1. jQuery图片延迟加载插件jQuery.lazyload

      查看演示   website   立即下载 插件描述:jQuery图片延迟加载插件jQuery.lazyload,使用延迟加载在可提高网页下载速度.在某些情况下,它也能帮助减轻服务器负载. 使用方 ...

  2. 使用jquery插件实现图片延迟加载技术

    有时我们看到一些大型网站,页面如果有很多图片的时候,当你滚动到相应的行时,当前行的图片才即时加载的,这样子的话页面在打开只加可视区域的图片,而其它隐藏的图片则不加载,一定程序上加快了页面加载的速度,对 ...

  3. jquery插件实现图片延迟加载

    在页面中图片较多时,一次性加载所有图片会耗去很多时间. 我们可以选择"延迟加载"的方式来加载图片,相对这种页面的加载速度将会有个很大的提升. 图片延迟加载的原理很简单,依据用户正浏 ...

  4. JQuery LazyLoad实现图片延迟加载-探究

    对于大量图片的网站,图片延迟加载是提高速度和性能的好方法. 目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片):二是自动预加载(加载完首屏后n秒后自动加载其他位置的图片).大体常用的 ...

  5. 利用Jquery Lazyload JS插件实现网页图片延迟加载

    Jquery Lazyload是一款网页图片延迟加载JS插件,本文介绍该JS的使用方法. 最新的jquery lazyload可以单独使用(即不依赖jquery),本文介绍的是依赖jquery的使用及 ...

  6. jquery.lazyload 插件实现图片延迟加载

    jquery.lazyload 插件实现图片延迟加载 看到了淘宝产品介绍中,图片是在下拉滚动条时加载,这是一个很不错的用户体验.减少了页面加载的时间了,也减轻了服务器的压力,就查了下用 JQuery. ...

  7. 基于原生js的图片延迟加载

    当页面图片比较多的时候,我们通常会做一个延迟加载,避免页面打开时一下子的请求数太多,加载过慢影响用户体验. 如果项目用了jquery框架,则可以直接用 jquery.lazyload.可在jquery ...

  8. Jquery图片懒加载和预加载

    Jquery图片懒加载和预加载 懒加载 1.什么是懒加载 Lazy Load也叫懒加载,延迟加载,顾名思义,就是在图片未到达可视区域时,不加载图片,我们常常在很多的优秀网站上看到类似的例子,例如迅雷. ...

  9. JS实现移动端图片延迟加载

    图片延迟加载常见的有,jquery.lazyload.js,原生JS实现的echo.js.但是都是必须给图片设置宽高. 因为项目是移动端,而且无法在加载前知道图片的宽高,所以,只好自己写了一个. 既然 ...

最新文章

  1. MS-SQL数据库开发—精典
  2. 将spfile从ASM里迁移到文件系统
  3. D3D API - D3DXCreateRenderToSurface渲染到纹理
  4. mysql dump 1449_跨版本mysqldump恢复报错Errno1449
  5. 阿里云上Kubernetes集群联邦
  6. docker run命令_CVE-2019-14271:Docker cp命令漏洞分析
  7. 80-450-010-原理-MySQL索引
  8. 基于JAVA+SpringMVC+Mybatis+MYSQL的二手车辆在线交易系统
  9. Sublime好看字体
  10. 排序算法之python实现(上)
  11. 区块链 + 供应链金融(1)
  12. 华为云服务器购买以及使用教程
  13. 【数据结构与算法python】最小生成树算法-Prim算法
  14. APP下载链接在微信被屏蔽了 无法打开的解决方案
  15. AVR中C语言while语言,AVR单片机汇编语言程序实例
  16. 电视信号中的一些基本概念 (转自驱动之家)
  17. jenkins + svn + maven +svn 实现当SVN提交代码后自动触发打包部署
  18. 虚拟机安装windows10
  19. 程序员生存定律-六个程序员的故事(2)
  20. 英语和汉语语法方面的区别(语言类型学)

热门文章

  1. 【数据结构与算法】之深入解析“正则表达式匹配”的求解思路与算法示例
  2. 126. Word Ladder II
  3. 第十届 蓝桥杯样题 —— 信用卡号验证
  4. ZYAR20A 亚克力2驱 蓝牙 298寻迹避障机器人 —— 程序目录
  5. Circular Sequence UVA - 1584
  6. WIN10 vnc 与Jeson ubuntu18.04 vncserver 远程控制的实现(亲测有效)
  7. 【嵌入式】Libmodbus之TCP模式Master端程序示例
  8. 【ARM】ARM其它指令
  9. 【Linux系统编程】特殊进程之僵尸进程
  10. 【Linux】一步一步学Linux——ssh-copy-id命令(180)