懒加载 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);
}
}
};
懒加载 lazy load的更多相关文章
- SAP Fiori里的List是如何做到懒加载Lazy load的
今天一同事问我这个问题:S/4HANA Fiori应用里的列表,一旦Scroll到底部就会自动向后台发起新的请求把更多的数据读取到前台显示. 以Product Master这个应用为例,我点击搜索之后 ...
- iOS 开发——实用技术Swift篇&Swift 懒加载(lazy)
Swift 懒加载(lazy) 在程序设计中,我们经常会使用 * 懒加载 * ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都 ...
- JPA数据懒加载LAZY配合事务@Transactional使用(三)
上篇博文<JPA数据懒加载LAZY和实时加载EAGER(二)>讲到,如果使用懒加载来调用关联数据,必须要保证主查询session(数据库连接会话)的生命周期没有结束,否则,你是无法抽取到数 ...
- JPA数据懒加载LAZY和实时加载EAGER(二)
懒加载LAZY和实时加载EAGER的概念,在各种开发语言中都有广泛应用.其目的是实现关联数据的选择性加载,懒加载是在属性被引用时,才生成查询语句,抽取相关联数据.而实时加载则是执行完主查询后,不管是否 ...
- JPA数据懒加载LAZY和实时加载EAGER(转)
原文:https://www.cnblogs.com/MrSi/p/8081811.html 懒加载LAZY和实时加载EAGER的概念,在各种开发语言中都有广泛应用.其目的是实现关联数据的选择性加载, ...
- Swift中懒加载(lazy initialization)的实现
Swift中是存在和OC一样的懒加载机制的,但是这方面国内的资料比较少,今天把搜索引擎换成了Bing后发现用Bing查英文\最新资料要比百度强上不少. 我们在OC中一般是这样实现懒加载初始化的: 1: ...
- 001_Chrome 76支持原生HTML 图片懒加载Lazy loading
Table Of Content 什么是懒加载? 语法参数及使用方式? 有哪些特点? 与js有关的实践 什么是懒加载? 技术背景 Web应用需要经常向后台服务器请求资源(通过查询数据库,是非常耗时耗资 ...
- Swift - 懒加载(lazy initialization)
Swift中是存在和OC一样的懒加载机制的,在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间 懒加载 格式: lazy var 变量: 类型 = { 创建变量代码 }() 懒 ...
- Swift 懒加载(lazy) 和 Objective-C 懒加载的区别
在程序设计中,我们经常会使用 懒加载 ,顾名思义,就是用到的时候再开辟空间,比如iOS开发中的最常用控件UITableView,实现数据源方法的时候,通常我们都会这样写 Objective-C - ( ...
随机推荐
- POJ 1273 || HDU 1532 Drainage Ditches (最大流模型)
Drainage DitchesHal Burch Time Limit 1000 ms Memory Limit 65536 kb description Every time it rains o ...
- iOS开发——网络编程OC篇&Socket编程
Socket编程 一.网络各个协议:TCP/IP.SOCKET.HTTP等 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作 ...
- android学习日记13--数据存储之File存储
4.文件存储File File即传统的I/O 流存储文件,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的 ...
- zend studio 安装xdebug
XDebug安装 到http://xdebug.org/download.php选择自己需要的xdebug版本.然后按照下面的配置建立目录.并在php.ini加入这些内容.重启server 注意xde ...
- careercup-中等难度 17.12
17.12 设计一个算法,找出数组中两数之和为指定值的所有整数对. 解答 时间复杂度O(n)的解法 我们可以用一个哈希表或数组或bitmap(后两者要求数组中的整数非负)来保存sum-x的值, 这样我 ...
- 读写锁ReaderWriterLockSlim
读写锁的概念很简单,允许多个线程同时获取读锁,但同一时间只允许一个线程获得写锁,因此也称作共享-独占锁. 某些场合下,对一个对象的读取次数远远大于修改次数,如果只是简单的用lock方式加锁,则会影响读 ...
- Response
Response This improved Response API, able to simplify the Framework's Response management. Practical ...
- 如何快速的开发一个完整的iOS直播app(原理篇)
目录 [如何快速的开发一个完整的iOS直播app](原理篇) [如何快速的开发一个完整的iOS直播app](播放篇) [如何快速的开发一个完整的iOS直播app](采集篇) 前言 大半年没写博客了,但 ...
- Java基础知识强化之网络编程笔记18:Android网络通信之 使用HttpClient的Post / Get 方式读取网络数据(基于HTTP通信技术)
使用HttpClient进行Get方式通信,通过HttpClient建立网络链接,使用HttpGet方法读取数据,并且通过Response获取Entity返回值. 使用HttpClient进行Post ...
- Java基础知识强化之IO流笔记64:合并流SequenceInputStream
1. SequenceInputStream合并流的概述: SequenceInputStream类可以将多个输入流串联在一起,合并为一个输入流,因此,该流也被称为合并流. 2. Sequence ...