JavaScript实现图片延迟加载技术

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

 

 

 

--ImageLazyLoad及实现原理
2010-12-29 14:41

如果留意淘宝的话,应该可以注意到:当打开产品页面后,并不是把页面中图片都下载下来,而是随着滚动条的滚动而加载图片.这样可以使页面载入速度更快,节省网站流量,减少服务器的负载.你可以灵活的把这一技术运用在存在大量图片的页面,比如频道页、活动页、搜索结果页等……

LazyLoad(延迟加载)技术不仅仅用在对网页中图片的延迟加载,对数据同样可以,Google ReaderBing图片搜索 就把
LazyLoad技术运用的淋漓尽致;

什么是ImageLazyLoad技术

    在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的交互。尤其是对于高清晰的图片,占的几M的空间。ImageLazyLoad技术就是,当前可见界面的图片是加载进来的,而不可见页面(通过滚动条下拉可见)中的图片是不加载的,这样势必会引起速度上质的提升。

    眼下网上使用此技术的网站有太多太多,如淘宝,还有一些动漫网站,他们都使用了这种技术。

    眼下比较常用的图片延迟加载技术有四种:kissy(淘宝的JS框架),Jquery 图片延迟插件,Prototype,YUI 2。

     抽时间去网上查查了,YUI的图片延迟技术是最成熟的,Jquery的图片延迟插件的设计灵感就来自于YUI的延迟技术(Lazyloader is inspired by  YUI   ImageLoader   Utility by Matt Mlinac)

怎么实现ImageLazyLoad

在页脚添加以下代码即可:

大家可以直接采用淘宝的延迟加载技术:
http://a.tbcdn.cn/kissy/1.0.0/build/imglazyload/imglazyload-min.js

调用方法也是很简单的: 
<script src="http://a.tbcdn.cn/kissy/1.0.0/build/imglazyload/imglazyload-min.js" 
type="text/javascript"></script> <script type="text/javascript">// <![CDATA[KISSY.ImageLazyload();// ]]></script>

注:该脚本依赖 yahoo-dom-event, 页面中需要加载 yui 2.x,你也可以直接引用下面的地址:
<script src="http://kissy.googlecode.com/svn/trunk/third-party/yui2/yahoo-dom-event/yahoo-dom-event.js " type="text/javascript"></script>

至于高级配置,大家可以看这里 ;

配置参数如下:
<script type="text/javascript">
KISSY.ImageLazyload({
mod: "manual", // 延迟模式。默认为 auto
diff: 200 // 当前屏幕下多远处的图片开始延迟加载。默认两屏外的图片才延迟加载
});
</script>

manual 模式时,需要手动将页面中需要延迟加载的图片的 src 属性名更改为 data-lazyload-src. 比如 SRP 页面,宝贝列表的后20个图片延迟加载。输出时,html 代码为:

<img data-lazy-src = "path/to/img" alt = "something" />

如果您是Jquery,Prototype等这些JS框架的粉丝,他们都有定制的LazyLoad Plugin提供;

可查看http://www.appelsiini.net/2009/12/tuning-lazy-loader

 

Jquery 用法:

1.导入JS插件

<script src="jquery.js" type="text/javascript"></script>   
<script src="jquery.lazyload.js" type="text/javascript"></script>

 

2.在你的页面中加入如下的javascript:  

$("img").lazyload();   

这将会使所有的图片都延迟加载。 

当然插件还有几个配置项可供设置。

 1.改变threshold

 $(“img”).lazyload({  threshold   : 200 });

 把阀值设置成200 意思就是当图片没有看到之前先load 200像素。

 2.当然了你也可以通过设置占位符图片和自定事件来触发加载图片事件

$("img").lazyload({  
    placeholder : "img/grey.gif",  
     event   : "click" 
});

3.可以通过定义effect 参数来定义一些图片显示效果

$("img").lazyload({  
     placeholder : "img/grey.gif",  
      effect  : "fadeIn" 
});

 LazyLoad(延迟加载)技术不仅仅用在对网页中图片的延迟加载,对数据同样可以,Google ReaderBing图片搜索 就把LazyLoad技术运用的淋漓尽致;

但做为技术而言没有十全十美的技术,缺点也是有的:

1.与Ajax技术的冲突;

2.图片的延迟加载,遇到高度特别高的图片,会出现停止加载的问题;

3.写代码不规范的朋友要注意了,不管由于什么原因,如果您的页面中,img标签的height属性未定义,那么我建议您最好不要使用ImageLazyLoad。

 

实现原理:

实现原理很简单,

 

   1.先把所有需要延迟加载的图片的src都设置成同1个小图片的连接(sprite.gif),把真真图片的连接放进图片的alt属性中,look下代码:

   <a class="inner" target="new" title="史上最重街舞选手和最柔软街舞选手" href="http://www.tudou.com/programs/view/Utmt1_6Z-lU/">

    <img width="120" height="90" class="pack_clipImg lazyImg" alt="http://i01.img.tudou.com/data/imgs/i/051/720/095/p.jpg" src="http://css.tudouui.com/skin/__g/img/sprite.gif" coords="_DAA"/>

   </a>   

 

   2. 绑定window.scroll事件,在该事件里面的重设所有class为lazyImg的图片的src值,在土豆首页找到如下JS:

   var o=function(){

     var s=TUI.pos.scrollTop(),q=c;

     if(q.box[0]){

      var r=q.box.offset().top;

        if(r-s>0&&r-TUI.pos.windowHeight()<s){

      q.init()

       }else{

      q.stop()

       }

     }

     if(!h||s<590){return true}

    TUI.widget.quickPlaylist.load();

    h=false

  };

    o();

    $(window).bind("scroll",o);

 

 

 

 

 

JavaScript延迟加载:提升网页性能的实用技术 构建自定义事件监听以实现延迟加载,可以利用函数。我们需要创建一个事件监听器,并在适当的时机触发一个自定义事件,以此来执行加载操作。下面是一个构建自定义事件监听的示例代码:// 假设我们有一个滚动容器和一个需要延迟加载图片// 创建自定义事件detail: {});// 自定义事件监听函数console.log('图片加载事件被触发');// 在滚动容器中添加滚动事件监听器// 当图片进入可视区域时,触发自定义事件});// 注册自定义事件监听。 阅读详情

相关推荐

网易数智CoreAgent实战:5步教你打造企业级AI数字员工(附避坑指南)

本文以网易数智CoreAgent智能体协作中枢为核心,提供了一份企业级AI数字员工的实战部署指南。文章详细拆解了从环境准备、智能体配置、业务集成、安全合规到效果评估的五个关键步骤,并分享了部署过程中的常见“避坑”经验,旨在帮助企业技术团队高效、安全地将AI智能体落地于实际业务场景,解决AI落地难题。

rice5的博客 926

图片延迟加载技术

尤其是对于高清晰的图片,占的几M的空间。 ImageLazyLoad技术就是,当前可是界面的图片是加载进来的,而不可见页面(通过滚动条下拉可见)中的图片是不加载的,这样势必会引起速度上质的提升。       眼下比较常用的图片延迟加载技术有四种:kissy(淘宝的JS框架),Jquery 图片延迟插件PrototypeYUI2。   一、使用JQuery插件插件名: jquery....

zw7534313的专栏 194

基于yolov5的鸟类图像准确识别

本项目主要基于yolov5进行鸟类准确识别,主要识别白鹭家族,红脚鹬,反嘴鹬,环颈珩,小白鹭以及夜鹭六类鸟

weixin_46064184的博客 3806

延迟加载(Lazyload)三种实现方式

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33862188的博客 1360

前端性能优化之 —— 图片延迟加载 (原理以及实现方式)

前端开发的时候,有些列表页面可能会有很多图片需要加载。一次加载太多图片,会占用很大的带宽,影响网页的加载速度。 这时候我们想到一种方式,让用户浏览到什么地方,就加载该处的图片。 这里写了一个简单的例子,大家可以去体验一下,当然这里考虑到的是最简单的情况。 这里简单的讲解一下这个例子里面的源码。 例子查看 DOM 结构 由一个父容器div#lazy-img,里面是图片标签,父容器是可以滚动

菜鸟笔记 1万+

网站首页的图片延迟加载是怎么实现的?

随着页面信息越来越丰富饱满,尤其像淘宝,京东之类的购物网站,首页就是他们的生命线! 最近在做某银行的网站,只有挤上首页才能得到更多的关注,于是乎各种业务人员就开始了首页位置之争,为了平息他们的战乱。首页囊括了他们全部的需求,他们满意的走人了,结果技术经理来了,说首页加载怎么这么大,于是乎,减!!! 首当其冲,缩小图片K数,不够,那怎么办,好吧,进入正题。长页面未显示的部分可以先不加载,省流量就是省...

weixin_34177064的博客 558

js开发:原生js实现图片延迟加载

js实现图片延迟加载方法一: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Generon的博客 805

LazyLoad.js及scrollLoading.js

LazyLoad.js及scrollLoading.js 原文链接:http://blog.csdn.net/ning109314/article/details/7042829  目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片);二是自动预加载(加载完首屏后n秒后自动加载其他位置的图片)。现在最流行使用的就是LazyLoad.js及scroll

编程猫的专栏 1546

移动端实现文字轮播_js实现移动端轮播图效果

本文实例为大家分享了移动端轮播图效果展示的具体代码,供大家参考,具体内容如下Documenthtml,body{width:100%;overflow-x:hidden;}html{font-size:100px;}.banner{position:relative;height:3rem;overflow:hidden;}.banner .wrapper{position:absolute;to...

weixin_39605894的博客 149

关于javascript延迟加载图片

今天在技术群中,有位童鞋问起了javascript延迟加载图片的问题,我在这就给大家说明下原理和实现方法。 延迟加载是通过自定义属性,把真实的img地址存到自定义属性中,如data-url=”img”,而图片真正的src存的是loading的图片,如src=”loading.gif”,通过JS...

144

js不需要知道图片宽高的懒加载方法(经过实际测试,不加宽高仍然是无法正常加载的,设置height:auto,height:100%,仍然显示高度为0)...

js不需要知道图片宽高的懒加载方法 懒加载是如何实现的? - 简书https://www.jianshu.com/p/e86c61468285找到一个不需要知道图片宽高的懒加载方法了(经过实际测试,不加宽高仍然是无法正常加载的,设置height:auto,height:100%,仍然显示高度为0) dinbror/blazy: Hey, be lazy! bLazy.JS is a light...

weixin_30883777的博客 442

Javascript实现图片延迟加载

所以,对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载。对页面加载速度影响最大的就是图片,一张普通的图片可以达到几M的大小,而代码也许就只有几十KB。当页面图片很多时,页面的加载速度缓慢,几S钟内页面没有加载完成,也许会失去很多的用户。// 页面窗口改变 / 视窗大小改变时。// 1. 做纵向的可见判断。// 3. 防止图片重复加载。// 加载需要懒加载的图片。// 判断图片是否可见。// 横纵方向改变时。

qq_34306228的博客 1206

网页页面延迟加载方案(提高页面的初始加载速度)

延迟加载图片是提升页面性能的有效手段,特别是在包含大量图片的页面中。通过使用现代浏览器支持的原生属性、Intersection Observer API、或现成的JavaScript库,可以轻松实现这一功能,从而优化页面加载速度和用户体验。

2301_79858914的博客 1734

JavaScript 延迟加载(Lazy Loading)的方法

懒加载图片:使用延迟加载图片。懒加载 JavaScript 文件:动态创建<script>标签加载 JavaScript 文件。懒加载 CSS 文件:动态加载外部样式表。按需加载模块:使用import()动态加载模块。懒加载滚动事件:通过延迟滚动事件的执行。懒加载图片占位符:使用占位符图像直到实际图片加载完成。懒加载外部数据:在需要时发送 API 请求,避免不必要的数据加载。通过这些延迟加载的技巧,可以有效提高网页性能,改善用户体验。

小蜗牛的珍贵百宝箱 1490

Js单个图片延迟加载

Js单个图片延迟加载 一.图片延迟加载在实际项目中经常出现,例如我们在浏览某宝,某东的商品时,可以发现,屏幕下面的图片有些时候并没有直接显示,这就是延迟加载的功效。例如下图: 当然,瑕不掩瑜,延迟加载的效益也是有目共睹的,那今天我们先来学习一下其中最好理解的单张图片延迟加载。所需结构如下: 1.一个封装好的JS文件,用于获取设置偏移量和父级参照物,以下是代码,可自己封装或cv: let utils = (function () { function screen(attr, value) {

weixin_47724586的博客 369

图片延迟加载:Intersection Observer API

允许你异步地观察一个或多个目标元素与其祖先元素或顶级文档视口(viewport)交叉状态的变化。当被观察的目标元素的可见性发生变化时,你可以收到一个回调,并且可以执行相应的操作,比如加载图片

读心悦 677

前端图片延迟加载详细讲解

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34092455的博客 71

LazyLoad.js及scrollLoading.js延迟加载网页图片

目前图片延迟加载主要分两大块,一是触发加载(根据滚动条位置加载图片);二是自动预加载(加载完首屏后n秒后自动加载其他位置的图片)。现在最流行使用的就是LazyLoad.js及scrollLoading.js这两个用jQuery写的小插件。 一、LazyLoad实现:   JavaScript" src="/js/lazyload/jquery.min.js"> jQuery(docume

163

图片延迟加载(兼容IE&FF&Chrome)

经常看到京东,团购有图片延迟加载的使用,于是自己捉摸着实现了一个,仅供参考。     js代码部分: /** *图片延迟加载 *@param yourfun 处理图片的方法 *@param divID scroll绑定的容器的ID(默认是当期事件触发的控件,然后是document) * **/ function lazyload(yourfun,divID,offsetP...

愤怒的coder 225

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

当页面图片比较多的时候,我们通常会做一个延迟加载,避免页面打开时一下子的请求数太多,加载过慢影响用户体验。 如果项目用了jquery框架,则可以直接用 jquery.lazyload.可在jquery官网下载到。 如果项目是基于原生js的,可以参考以下: <!doctype html> <html lang="en"> <head> ...

dayanwu2842的博客 134
上一篇: javascript 加载
下一篇: YUI Loader
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

折腾数据折腾代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值