前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于jQuery或Zepto的图片延迟加载插件

基于jQuery或Zepto的图片延迟加载插件

原创
作者头像
李洋博客
发布于 2022-11-03 05:02:32
发布于 2022-11-03 05:02:32
3.3K00
代码可运行
举报
文章被收录于专栏:李洋博客李洋博客
运行总次数:0
代码可运行

当我们网站的页面图片过多时,加载速度就会很慢。尤其是用手机2G/3G访问页面,不仅页面慢,而且还会用掉很多流量。我们主题之前也都采用了图片的懒加载形式,但都不完美,部分主题还采用了占位图片来控制懒加载,今天换一种js图片懒加载,它原理就是将页面内所有需要加载的图片全部换成一张默认的图片(一般尺寸很小),只有图片在可视区域才去请求加载,这样的话应该就能满足我们日常所需,好了不说废话先按照教程操作试试,后期主题会逐一更新,稍安勿躁!!!

实现原理

<img class="lazy" src="loading.png" data-src="img/example.jpg">

页面打开时首先会加载src里的图片,即很小的加载图;通过监听scroll事件,当图片在可视区域时,使用data-src替换src,加载真正的图片。

使用

实际使用时一般使用已经存在的插件,如lazyload插件。

lazyload插件网上能搜出很多,常见的是: 1、jquery.lazyload.js: 依赖jQuery

JavaScript

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*!
 * Lazy Load - jQuery plugin for lazy loading images *
 * Copyright (c) 2007-2015 Mika Tuupola
 * * Licensed under the MIT license: *   http://www.opensource.org/licenses/mit-license.php *
 * Project home:
 *   http://www.appelsiini.net/projects/lazyload *
 * Version:  1.9.7
 *
 */

http://www.appelsiini.net/projects/lazyload

2、lazyload.js: 依赖jQuery或者Zepto

JavaScript

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*!
 * An jQuery | zepto plugin for lazy loading images. * author -> jieyou * see https://github.com/jieyou/lazyload
 * use some tuupola's code https://github.com/tuupola/jquery_lazyload (BSD)
 * use component's throttle https://github.com/component/throttle (MIT)
 */

下载:https://github.com/52fhy/lazyload

以上二者用法是一样的,第二个基于第一个修改,以支持zepto。现在以第二个示例:

lazyload.js

1、引入

Markup

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script src="jQuery.js"></script><script src="lazyload.min.js"></script>

2、使用

Markup

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--lazyload.js默认懒加载原图片属性是data-original--><img class="lazy" src="loading.png" data-original="img/example.jpg">
$(".lazy").lazyload();

3、配置

缺省:

JavaScript

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
defaultOptions = {
    threshold                   : 0, //图像提前多少加载,单位px
    failure_limit               : 0,
    event                       : 'scroll', //触发事件
    effect                      : 'show', //效果
    effect_params               : null, //effect的参数数组
    container                   : w, //使用容器,默认是window
    data_attribute              : 'original', //可以改成src,即对应data-src属性
    data_srcset_attribute       : 'original-srcset',
    skip_invisible              : true,
    appear                      : emptyFn,
    load                        : emptyFn,
    vertical_only               : false, //竖直方向滚动的页面中使用
    check_appear_throttle_time  : 300,
    url_rewriter_fn             : emptyFn,
    no_fake_img_loader          : false,
    placeholder_data_img        : 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC',    // for IE6\7 that does not support data image
    placeholder_real_img        : 'http://ditu.baidu.cn/yyfm/lazyload/0.0.1/img/placeholder.png'
    // todo : 将某些属性用global来配置,而不是每次在$(selector).lazyload({})内配置}YAML复制全屏
}

示例:

JavaScript

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$(function() {
  $(".lazy").lazyload({         
        effect : "fadeIn",//效果
        data_attribute : 'src',//可以改成src,即对应data-src属性
        event: 'scroll',//默认值
        container: $(".content"), //一般无需指定,即window。sui框架里必须指定
 });
});

代码记录完成,测试几天看看效果,如无问题后续逐一更新,如遇问题依情况而定,好了,假期回来之后工作肯定不少,抓紧时间工作去吧,有问题留言反馈!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
Delphi使用NativeXml处理XML(二)
4.1.类(Classes) 4.1.1.TComponentAccess类   TComponentAccess = class(TComponent) 4.1.1.1.ComponentState   property ComponentState; 4.1.1.2.SetComponentState   procedure SetComponentState(const AState: TComponentState); 4.1.2.TNativeXml类   TNativeXml = class(TPersistent)   TNativeXml是XML文件的载体。创建一个TNativeXml,然后使用方法LoadFromFile、LoadFromStream或ReadFromString加载XML文档到内存中。或者从头开始使用Root.NodeNew添加节点,并最终SaveToFile和SaveToStream保存结果为一个XML文档。用属性Xmlformat = xfReadable确保缩进(易读)输出。 4.1.2.1.AbortParsing   property AbortParsing: boolean;   如果您使用一个SAX-like方式的OnNodeNew和OnNodeLoaded事件,并要中止解析过程,设置AbortParsing为True。例如:
Vaccae
2019/07/25
1.5K0
[重点]delphi 实现 根据给定的标题去《中国青年报》网上电子报数据中查找匹配的内容,并从该内容中取出引题、正题、副题、作者和正文。
项目要求:根据给定的标题去《中国青年报》网上电子报数据中查找匹配的内容,并从该内容中取出引题、正题、作者和正文。
全栈程序员站长
2022/09/07
7210
delphi枚举wmi
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,SiMath,SimEncrypt, StdCtrls,ActiveX,ComObj,JwaWbemCli; type TForm1 = class(TForm) Button1: TButton; Memo: TMemo; Button2: TB
战神伽罗
2019/07/24
2.1K0
Python For Delphi---
svn checkout http://python4delphi.googlecode.com/svn/trunk/ python4delphi-read-only
py3study
2020/01/10
2.8K0
计算器(delphi)
1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 7 Dialogs, StdCtrls, bsSkinData, BusinessSkinForm, Mask, bsSkinBoxCtrls, bscalc, 8 bsSkinCtrls; 9 10 type 11
小爷毛毛_卓寿杰
2019/02/13
3K0
delphixe5 android,Delphi XE5 Android手机端转换Ansi字符串
本文章介绍了Delphi XE5 Android手机端转换Ansi字符串,本代码是“浙江-樵夫”开发的一个程序,用来对字符串进行转换,主要代码是:
全栈程序员站长
2022/09/09
3470
奖学金评分系统(系统分析与设计版与Delphi实现代码)
在奖学金评比过程中,学生综合测评是学校普遍采用的评比手段。对学生实施综合素质测评的目的在于正确评价学生的综合素质,为评奖学金提供依据,实现学生教育管理工作的标准化、制度化和科学化,引导和促进学生德、智、体、美全面发展。
小爷毛毛_卓寿杰
2019/02/13
9580
奖学金评分系统(系统分析与设计版与Delphi实现代码)
学习笔记:7z在delphi的应用
最近做个发邮件的功能,需要将日志文件通过邮件发送回来用于分析,但是日志文件可能会超级大,测算下来一天可能会有800M的大小。所以压缩是不可避免了,delphi中的默认压缩算法整了半天不太好使,就看了看7z,在windows下有dll那么就用它吧。 下载7z.dll,还有一个delphi的开发sdk文件,sevenzip.pas。有这两个就可以了。 压缩 使用超级简单 procedure TForm1.Button1Click(Sender: TObject); var Arch: I7zOutArchi
用户1105954
2018/01/12
2.7K1
FTP my IP
程序功能,获取主机ip然后上传到指定的ftp,检测时间间隔每30min。程序源代码编译即可直接运行。
obaby
2023/02/28
2480
Delphi使用NativeXml处理XML(四)
4.2.1.ComponentCreateFromXmlFile   unit NativeXmlObjectStorage   function ComponentCreateFromXmlFile(const FileName: string; Owner: TComponent; const Name: string): TComponent;   从文件名称为FileName的XML文件读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它调用ComponentCreateFromXmlStream实现。 4.2.2.ComponentCreateFromXmlNode   function ComponentCreateFromXmlNode(ANode: TXmlNode; Owner: TComponent; const Name: string): TComponent;   从TXmlNode类型的ANode节点读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它使用TsdXmlObjectReader类实现。 4.2.3.ComponentCreateFromXmlStream   function ComponentCreateFromXmlStream(S: TStream; Owner: TComponent; const Name: string): TComponent;   从XML流类型的S中读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它调用ComponentCreateFromXmlNode实现。 4.2.4.ComponentCreateFromXmlString   function ComponentCreateFromXmlString(const Value: string; Owner: TComponent; const Name: string): TComponent;   从XML字符串类型的Value中读取并创建组件。为了成功地从头开始创建组件,组件的类必须事先调用RegisterClass进行登记。添加到指定Owner组件的子组件列表。这通常是一个形式。指定Name作为创建的组件的新组件的名称。 注:它调用ComponentCreateFromXmlStream实现。 4.2.5.ComponentSaveToXmlFile   procedure ComponentSaveToXmlFile(AComponent: TComponent; const FileName: string; AParent: TComponent);   存储组件AComponent所有公布的属性到名为FileName 的XML文件。指定AParent为了储存Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlFile实现。 4.2.6.ComponentSaveToXmlNode   procedure ComponentSaveToXmlNode(AComponent: TComponent; ANode: TXmlNode; AParent: TComponent);   存储组件AComponent所有公布的属性到TXmlNode格式的ANode中。指定AParent为了储存Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlNode实现。 4.2.7.ComponentSaveToXmlStream   procedure ComponentSaveToXmlStream(AComponent: TComponent; S: TStream; AParent: TComponent);   存储组件AComponent所有公布的属性到XML格式的流S中。指定AParent为了储存Parent正确的方法和事件参考。 注:它调用ObjectSaveToXmlStream实现。 4.2.8.ComponentSaveToXmlString   function ComponentSaveToXmlString(AComponent: TComponent; AParent: TComponent): string;   存储组件AComponent所有公布的属
Vaccae
2019/07/24
1.9K0
Delphi中使用RTTI
运行期类型信息(RTTI)是一种语言特征,能使应用程序在运行时得到关于对象的信息。
Vaccae
2019/07/24
2K0
.NET 2.0 Web Services的bug?
今天测试.net 2.0的WebService,发现了一个大问题。就是无法获取参数,参数永远是null。当然了使用.net调用没有任何问题,web测试页也正常。不论是Delphi7还是java调用的结果的都是一样的,难道是.net 2.0的Bug? 测试结果发现:值类型参数全部为缺省值,引用类型全部为null WebService的代码如下:
用户3135539
2018/09/12
6510
raw socket (DELPHI开发平台)
下面给出一个通过自定义源IP地址和源端口演示如何发送UDP数据包的例子,或许对你了解有所帮助.你也可以设计自己的协议,如发送SY N 数据浪涌,或其它类型的自定义协议。 { Raw 数据包 Sender 使用:Delphi + Winsock 2
战神伽罗
2019/09/02
6970
delphi 使用windowsmediaplayer播放视频
delphi7中原本自带的一个Tmediaplayer控件,但是发现有不少视频是无法播放的,于是就想到了用windowsmediaplayer来进行播放。
Vaccae
2019/07/25
3.1K0
delphi 使用windowsmediaplayer播放视频
【Delphi】 Thread.Queue与Synchronize的区别
前话: 其实大家要学会看源码, 我接下来要说的这些东东,与其等别人讲,还不如自己搞几个代码试一下,印象还深刻点 TThread.Queue和TThread.Synchronize的区别,
战神伽罗
2019/07/24
1.9K0
delphi完美的线程注入和卸载
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
战神伽罗
2019/07/24
1K0
蛋疼的挂掉360云查杀的小玩意儿
其实就是个域名屏蔽的列表,做个小工具便于免杀。没什么高深的技术。 最后蛋疼的贴点代码: procedure TForm1.FormCreate(Sender: TObject); begin GetSystemDirectory(sysdir,256); hosts := sysdir + '\drivers\etc\hosts'; backup := sysdir + '\drivers\etc\hosts.bak'; //ShowMessage(hosts); if FileExists(hosts
obaby
2023/02/28
3410
蛋疼的挂掉360云查杀的小玩意儿
截取程序的网络封包(Delphi Hook API)
有时候我们需要对其它应用程序发送和接收的网络数据进行拦截,比如要对IE发送的**头进行分析,得到请求的地址等.这次我们可以用一些例如WPE, Sniffer之类的工具来达到目的.但是工具功能有限,要想实现更强大的功能,还是我们自己动手来DIY吧. 拦截网络数据封包的方法有三种,一是将网卡设为混杂模式,这次就可以监视到局域网上所有的数据包,二是HOOK目标进程的发送和接收的API函数,第三种方法是自己实现一个代理的DLL.在这里我们使用HOOK API的方法,这样易于实现,而且也不会得到大量的无用数据(如第一种方法就会监视到所有的网络数据). 下面是一个尽量简化了的API HOOK的模版,原理是利用消息钩子将DLL中的代码注入到目标进程中,再用GetProcAddress得到API函数入口地址,将函数入口址改为自己定义的函数入口,这样就得到了API函数的相应参数,处理完后,再改回真实API函数入口地址,并调用它. HOOK.DLL的代码:
战神伽罗
2019/07/24
1.9K0
截取程序的网络封包(Delphi Hook API)
数组类型与数组指针的巧妙利用
本例通过存取结构, 慢慢引入了数组类型与指针的一些使用方法; 其中六个小例子的测试内容和结果都是一样的.
Vaccae
2019/07/24
8400
学习笔记:delphi多线程知识
最近一直在温习旧的知识,刚好学习了一下Java的线程安全方面的知识,今天想起之前一直做的Delphi开发,所以还是有必要温习一下,看看这些不同的编程语言有什么不同之处。 Delphi的线程同步方法: 1、临界区 申明一个临界资源 FLock   : TRTLCriticalSection; 先初化一个临界资源对象 InitializeCriticalSection(FLock) 销毁临界资源对象 DeleteCriticalSection(FLock) procedure TSaveThread.Push
用户1105954
2018/01/12
1.2K0
推荐阅读
相关推荐
Delphi使用NativeXml处理XML(二)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档