懒加载 lazy load

懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,

而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用。

比如,用户滚动到相应位置时,显示相应的图片,否则不加载!!!

下面是一个图片懒加载的示例.

这个html文件上含有许多div标签,一个div标签下要添加一个子标签img用来显示一个图片,如果页面载入时全部从服

务器端下载图片资源,无疑十分耗费时间,所以我们将采用图片懒加载的方式,使用户滚动到当前位置时才加载该位置的图

片。

首先,在html中我们要借助自定义属性data-src来保存图片的资源地址

即所有的要显示图片的div标签加上一个data-src属性

<div class="lazyDone" data-src="http://你的图片资源地址0"></div>
<div class="lazyDone" data-src="http://你的图片资源地址1"></div>
<div class="lazyDone" data-src="http://你的图片资源地址2"></div>
<div class="lazyDone" data-src="http://你的图片资源地址3"></div>
<div class="lazyDone" data-src="http://你的图片资源地址4"></div>
<div class="lazyDone" data-src="http://你的图片资源地址5"></div>
<div class="lazyDone" data-src="http://你的图片资源地址6"></div>
<div class="lazyDone" data-src="http://你的图片资源地址7"></div>
<div class="lazyDone" data-src="http://你的图片资源地址8"></div>
<div class="lazyDone" data-src="http://你的图片资源地址9"></div>

在我们的js中就可以进行处理,识别出这些带有data-src标签的div。然后计算该位置到页面顶部的距离,判断用户是否

滚动到该位置,如果达到则取出它的data-src的value,创建一个子标签img,将div的data-src的值赋值给img的src属性。

然后显示这个img标签,用户就可以在该位置看到相应的图片了。

function setImg($obj){
     var src = $obj.getAttribute("data-src");
     var img = document.createElement("img");
     img.src = src;
     if($obj.children.length == 0){
        //第一次滚动到此位置时加载,之后资源已经下载,不用重复添加
        $obj.appendChild(img);
     }
}
//获得对象距离页面顶端的距离
 function getHeight($obj) {
     var h = $obj.offset().top;
     return h;
}

window.onscroll = function(){
     var $div = $(".lazyDone");
     for (var i = 0; i < $div.length; i++) {
        var $odiv = $div[i];
        //检查$odiv是否在可视区域
        var t = document.documentElement.clientHeight + (document.documentElement.scrollTop || document.body.scrollTop);
        var h = getHegiht($odiv);
        if (h < t) {
            setImg($odiv);
        }
    }
}; 
时间: 2024-08-10 21:29:42

懒加载 lazy load的相关文章

SAP Fiori里的List是如何做到懒加载Lazy load的

今天一同事问我这个问题:S/4HANA Fiori应用里的列表,一旦Scroll到底部就会自动向后台发起新的请求把更多的数据读取到前台显示. 以Product Master这个应用为例,我点击搜索之后,结果区域显示当前系统一共有140个product,但是只有前25个返回并显示在浏览器里. 这个分页效果是UI5 OData的参数实现的:$skip=0&top=25. 而总数140,是通过参数$inlinecount实现,其原理和ABAP Open SQL的SELECT COUNT(*)类似. 从

iOS 开发——实用技术Swift篇&amp;Swift 懒加载(lazy)

Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都会这样写 Objective-C 1 //必须实现的数据源代理方法 2 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 3 { 4 return self.dataArr

Swift中懒加载(lazy initialization)的实现

Swift中是存在和OC一样的懒加载机制的,但是这方面国内的资料比较少,今天把搜索引擎换成了Bing后发现用Bing查英文\最新资料要比百度强上不少. 我们在OC中一般是这样实现懒加载初始化的: 1: @property (nonatomic, strong) NSMutableArray *players; 2:   3: - (NSMutableArray *)players { 4: if (!_players) { 5: _players = [[NSMutableArray alloc

20.Swift懒加载lazy

// Swift懒加载使用lazy关键字来修饰属性 // 在属性后面跟= {}进行具体的赋值 // 只会被加载一次 lazy var names : [String]? = { // () -> ([String]) in print("加载数据") return ["why", "lnj", "lmj"] }() override func viewDidLoad() { super.viewDidLoad() } o

Swift 懒加载(lazy) 和 Objective-C 懒加载的区别

在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都会这样写 Objective-C - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return self.dataArray.count; } - (UITableViewCell *)tableView:

懒加载 lazy loading

懒加载:延迟加载,当程序启动时不加载资源,当程序需要这些资源时再去加载.需要的时候再加载的一种方式,能够减少内存的占用,效率高.其本质是重写get方法. 背景:由于ios内存有限,如果我们一次性将所有资源加载完毕将极大的消耗内存,降低程序运行效率.所以就要将一些比较大的资源,如音频,数据,图片等大资源进行懒加载,就需要                                             先判断是否存在,如果不存在再创建实例化. 1 @property (nonatomic,

【JavaScript】使用纯JS实现多张图片的懒加载Lazy(附源码)

一.效果图如下 上面的效果图,效果需求如下 1.还没加载图片的时候,默认显示加载图片背景图 2.刚开始进入页面,自动加载第一屏幕的图片 3.下拉界面,当一张图片容器完全显露出屏幕,即刻加载图片,替换背景图 4.加载图片的时候,有渐进显示图片效果 二.难点 1)如何Ajax请求数据 2)如何动态将json数据绑定到html中. 3)如何通过对图片的定位计算,触发图片懒加载机制 4)加分项,显示图片时有渐现的过渡动画 三.前期知识点 1)Ajax相关知识,XMLHttpRequest对象,所有现代的

hibernate延迟加载(懒加载)详解

Hibernae 的延迟加载是一个非常常用的技术,实体的集合属性默认会被延迟加载,实体所关联的实体默认也会被延迟加载.Hibernate 通过这种延迟加载来降低系统的内存开销,从而保证 Hibernate 的运行性能. 下面先来剖析 Hibernate 延迟加载的"秘密". 集合属性的延迟加载 当 Hibernate 从数据库中初始化某个持久化实体时,该实体的集合属性是否随持久化类一起初始化呢?如果集合属性里包含十万,甚至百万的记录,在初始化持久化实体的同时, 完成所有集合属性的抓取,

(11)Hibernate懒加载

1.get.load方法区别? get: 及时加载,只要调用get方法立刻向数据库查询 load:默认使用懒加载,当用到数据的时候才向数据库查询. 2.懒加载(lazy) 2.1.概念 概念:当用到数据的时候才向数据库查询,这就是hibernate的懒加载特性. 目的:提升程序执行效率! 2.2.lazy属性的值 在Hibernate中,懒加载对应lazy属性的值. lazy属性的值 序号 值 含义 1 true 使用懒加载 2 false 关闭懒加载 3 extra 在集合属性(配置当中使用s