懒加载课堂笔记

http://www.jianshu.com/p/29edd52a8e03

懒加载课堂笔记

作者 饥人谷_李栋 关注

2015.12.30 14:28* 字数 1005 阅读 402评论 5喜欢 7赞赏 1

饥人谷_李栋


  1. 定义
  2. 图片懒加载
  3. 阶段实现
  4. 如何判断图片在可视范围
  5. 代码思路
  6. 封装
  7. 懒加载抽离
  8. 曝光去重
  9. 总结

一、定义

加载一个东西,不需要立刻加载,而是在需要的时候再加载
任何东西都可以实现 异步加载

二、图片的懒加载

当滚动窗口,DOM元素出现在面前的时候,在加载(曝光加载)

阶段实现:

1.用最普通、古老的方式实现懒加载
2.简单封装 或者写成Jquery的插件
3.把懒加载抽离出来,变成曝光组件,不仅仅是图片的懒加载,任何东西都可以实现懒加载
4.继续完善组件

图片的懒加载
img src="b lank.png" data-src="xxx1"
img src="b lank.png" data-src="xxx2"
...
img src="b lank.png" data-src="xxxn"
  • 可以先加载空白图片,用来占位
  • 真实的图片地址 放在data-src里面
  • 当图片出现在窗口上(可视范围内)的时候,用data-src属性来替换src属性
xxx.attr("src",xxx.attr("data-src"))
  • 自定义的属性用data开头 如 data-src=""
    //可以用简单的方法去获取data...
如何判断图片在可视范围呢

图片是个长长的画布,浏览器窗口就相当于一个相框,页面就相当于一张的纸
当你滚动的时候,相当于这张纸在后面抽动

参数1:滚动的高度
    $(".content").offset().top
参数2:当前元素到这张纸顶端的高度
    $(window).scrollTop()
参数3:窗口的高度
    $(window).height()

临界点:参数1 = 参数2+参数3
可视范围内,即:参数1 < 参数2+参数3

代码思路
  • 默认情况下,图片是不显示的,只显示空白图
  • 函数包裹:判断图片是否在可视范围内,如果是,则显示图片
  • 具体的语义判断函数
  • 由于可视范围判断会用到滚动,需要在开头加滚动监听
  • 曝光去重

代码友情链接嘿嘿

封装

//可以隔离命名空间

//把模块写成对象,所有成员放到对象里面,会暴露所有模块成员
var LazyImg={
init:function(){},
xx :function(){},
...
}
LazyImg.init($("img"))

当然 可以做成Jquery plugin

$.fn.LazyImg=function(){
...
}
$("img").LazyImg()

为了改良第一种封装方法,使用了自动执行函数包裹,好处就是不暴露私有成员

var LazyImg=(function(){
  var x1=function(){}
  var x2=function(){}
    return{
    x1:x1,
    x2:x2
    }
})("img")
懒加载抽离

//懒加载不仅仅是图片需要
把显示图片这个动作的函数抽离出来,在封装调用是传递进去
当然传别的函数,就可以其他DOM元素的懒加载

曝光去重

1.页面加载完成之后,不再做再次加载DOM元素的动作
2.当滚动停止后,执行动作

轮播-懒加载实现

开始的时候,只有第一张有图片,整个轮播都没有启动
当你页面加载完成之后,轮播组件启动,开始滚动
每滚一次 ,看图片存不存在,再去加载这个图片
当说有图片都加载完成之后,就自动开始轮播

定义一个数组,里面的数据都是从后台传过来的,一些图片的地址,
可以用循环,加一个setinteval,把里面的地址一个个的替换src,
这样,用户会看到图片换来换去,也可以实现轮播



总结:

  • $(xxx)得到的是一个类数组
    //用id来选择$("#xxx")也可以,只不过数组里面只有一个元素而已
  • 可以用each()来遍历元素的缓存
    不知道功能怎么实现的时候,先大致的描述一下,这就是个函数
    功能可以具体的写,具体的语义再用函数来实现
时间: 2024-10-19 19:07:47

懒加载课堂笔记的相关文章

js效果笔记:怎样实现图片的懒加载以及jquery.lazyload.js的使用

在项目中有时候会用到图片的延迟加载,那么延迟加载的好处是啥呢? 我觉得主要包括两点吧,第一是在包含很多大图片长页面中延迟加载图片可以加快页面加载速度:第二是帮助降低服务器负担. 下面介绍一下常用的延迟加载插件jquery.lazyload.js以及怎样实现一个延迟加载的插件. 一:jquery.lazyload.js插件 lazyload是jQuery写的延迟加载插件,在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预加载的处理方式正好是相反的. 实现原理 首

(Object-C)学习笔记 --OC的懒加载和单例方法

OC的懒加载 什么是懒加载: 懒加载——也称为延迟加载,即在需要的时候才加载(效率低,占用内存小).所谓懒加载,写的是其get方法. 注意:如果是懒加载的话则一定要注意先判断是否已经有了,如果没有那么再去进行实例化. 懒加载的好处 (1)不必将创建对象的代码全部写在viewDidLoad方法中,代码的可读性更强 (2)每个控件的getter方法中分别负责各自的实例化处理,代码彼此之间的独立性强,松耦合 懒加载的例子: #import "MusicTableViewController.h&quo

IOS 开发笔记-基础 UI(6)照片浏览器(控件的懒加载)

使用UIImageView.UILabel.UIButton实现一个综合小案例 功能分析 (1)点击箭头切换序号.图片.描述 (2)如果是首张图片,左边箭头不能点击 (3)如果是尾张图片,右边箭头不能点击 步骤分析 (1)搭建UI界面 (2)监听按钮点击 切换序号.图片.描述 1. 界面分析 1> 需要读取或修改的属性的控件 // 序号标签 // 图片 // 图片描述 // 左边按钮 // 右边按钮 2> 需要监听响应事件的对象,需要添加监听方法 // 左边按钮 // 右边按钮 uiimage

【转】ViewPager学习笔记(一)——懒加载

在项目中ViewPager和Fragment接口框架已经是处处可见,但是在使用中,我们肯定不希望用户在当前页面时就在前后页面的数据,加入数据量很大,而用户又不愿意左右滑动浏览,那么这时候ViewPager中本来充满善意的预加载就有点令人不爽了.我们能做的就是屏蔽掉ViewPager的预加载机制.虽然ViewPager中提供的有setOffscreenPageLimit()来控制其预加载的数目,但是当设置为0后我们发现其根本没效果,这个的最小值就是1,也就是你只能最少前后各预加载一页.那么,这时候

Hibernate学习笔记(八) — 懒加载与抓取策略

懒加载(Load On Demand)是一种独特而又强大的数据获取方法,它能够在用户滚动页面的时候自动获取更多的数据,而新得到的数据不会影响原有数据的显示,同时最大程度上减少服务器端的资源耗用.总结一句话:什么时候需要数据,什么时候加载. 一.懒加载 1.1 类的懒加载 由javassist产生的代理类与Classes类是继承关系, session.load()方法产生的是代理对象,该代理类是持久化类的子类 /** * 类的懒加载 */ @Test public void testClass_l

Hibernate学习笔记-懒加载Lazy-true

1. 懒加载概述以及使用情景 描述:懒加载(lazy),简单说就是延时.延迟加载. 情景:在Hibernate框架应用中,就是当我们要访问的数据量过大时,使用缓存并不太合适,因为内存容量有限 ,为了减少系统资源的消耗,减少并发量,这时需要用懒加载机制来弥补这种缺陷,但是这并不意味用了懒加载总体性能就提高了. 应用: 比如学校school和学生student,学校与学生1对多,如果lazy设置为 false,那么只要加载了一个学校的信息,就会根据一对多配置的关系把所有学生的信息也加载出来.但是实际

Hibernate get对象的懒加载问题

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.wolf.a_StudentManageSystem.domain.Teacher.courses, could not initialize proxy - no Session at org.hibernate.collection.internal.AbstractPersistentCollect

SpringXML方式配置bean的懒加载lazy-init

lazy-init(懒加载),表示该bean在容器初始化的时候不进行初始化. 例如: <bean name="role1" class="com.fz.entity.Role" lazy-init="true"> 以上配置表示:spring容器在初始化的时候不会初始化role1这个bean,当配置上lazy-init=true之后,表示该bean是懒加载模式,什么时候用到了该bean才会进行初始化. 它有两个值:true,false(

React 路由懒加载的几种实现方案

这篇文字简单的介绍了React在路由懒加载方面的几种实现方案. 传统的两种方式 import() 符合ECMAScript提议的import()语法,该提案与普通 import 语句或 require 函数的类似,但返回一个 Promise 对象.这意味着模块时异步加载的 webpack v2+ 使用 使用方式 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 function component() {  return import( /* webpackChu