0.3.0 • Published 5 years ago

@autofe/lazyload v0.3.0

Weekly downloads
-
License
MIT
Repository
github
Last release
5 years ago

Lazyload

支持图片懒加载,对于非图片内容,可以通过 onAppear 回调函数来自己处理加载逻辑.

Usage

首先你需要修改你的 HTML , 配置 data-src 来指定实际显示的图片. 另外, 要求指定图片的尺寸.

<img class="lazy" data-src="img/example1.jpg" width="640" height="480">
<img class="lazy" data-src="img/example2.jpg" width="640" height="480">
<img class="lazy" data-src="img/example3.jpg" width="640" height="480">

然后通过脚本初始化

$('img.lazy').lazyload();

自定义图片来源

<img class="lazy" data-src2="img/example1.jpg" width="640" height="480">
<img class="lazy" data-src2="img/example2.jpg" width="640" height="480">
<img class="lazy" data-src2="img/example3.jpg" width="640" height="480">
$('img.lazy').lazyload({
  attr: 'data-src2'
});

还可以配置函数

$('img.lazy').lazyload({
  attr: function () {
    return $(this).attr('data-src2');
  }
});

使用 srcset 来支持 Retina 屏幕

<img class="lazy"
  width="100" height="75"
  data-src="demo.jpg"
  data-srcset="demo.jpg 100w, demo_2x.jpg 200w"
  sizes="100px">
$('img.lazy').lazyload();

当然, 你可以可以自定义 srcset 来源:

$('img.lazy').lazyload({
  srcsetAttr: 'data-srcset2'
});

或者

$('img.lazy').lazyload({
  srcsetAttr: function () {
    return $(this).attr('data-srcset2');
  }
});

区块懒加载

<style>
  .box {
    margin: 20px auto;
    width: 500px;
    height: 500px;
    background-color: #f2f2f2;
    transition: all 0.3s;
  }
  .box.active {
    background-color: #f60;
  }
</style>
<div class="box"><div>
<div class="box"><div>
<div class="box"><div>
$('.box').lazyload({
  onAppear: function () {
    $(this).html('<span>Loaded</span>').addClass('active');
  }
});

直接加载图片

当你不想要滚动懒加载时, 你可以直接指定一个延迟时间来加载图片, 比如 1000 毫秒后加载所有图片.

$('.lazy').lazyload({
  delay: 1000
});

Options

参数可以通过 data attributes 或者 JavaScript 两种方式来配置.

NameTypeDefaultDescription
containerobjectwindow滚动容器, 默认是 window , 仅支持原生 Dom 对象做为参数.
thresholdnumber0偏移值, 用户判断 DOM 是否满足条件.
directionstringvertical方向, 用于判断 DOM 是否满足条件. 可配置 'both'(位于viewport内), 'vertical'(仅考虑垂直方向), 'horizontal'(仅考虑水平方向), 'above'(位于viewport及上方即可).
skipInvisiblebooleanfalse是否忽略不可见 DOM . 不建议修改此项配置
failureLimitnumber0懒加载内部有一个依赖图片顺序的性能优化机制, 如果你的图片顺序是错乱的, 你可以适当调大该数值.
delaynumber-1延迟加载时间, 单位毫秒, 当 delay >= 0 时, 会在 delay 时长后立即加载所有图片.
attrstring or functiondata-src配置图片的 src 来源
srcsetAttrstring or functiondata-srcset配置图片的 srcset 来源
removeAttrbooleantrue当图片加载完毕后,去掉 attrsrcsetAttr 配置的属性
onAppearfunctionnull当 DOM 满足条件时, 触发该回调函数, 仅触发一次.
onLoadfunctionnull仅针对图片, 当图片加载成功时触发该回调函数.
onErrorfunctionnull仅针对图片, 当图片加载失败时触发该回调函数.
placeholderstring一张 base64 透明图仅针对图片, 占位图, 当没有默认 src 属性时, 会设置这个图片.

Methods

.lazyload(options)

初始化, 可以接受参数进行配置.

$('img.lazy').lazyload({
  threshold: 100
});

手动销毁监听

使用 $(el).lazyload(options) 方式创建的监听是 无法 手动(主动)去销毁监听的;(为了不影响 jQuery 的链式调用准则)

  1. 必须使用 let lazyDestroyDemo = new AutoFE.Lazyload(el, options) 来创建实例, el 可以是 jQuery 对象 / DOM 对象 / CSS 选择器(内部实现还是依赖 jQuery)
  2. 当需要主动去销毁该实例的监听时,通过调用 lazyDestroyDemo.unbind() 来销毁
  3. 必要时销毁实例 lazyDestroyDemo = null

如在 Tab 形式的异步列表,在切换 Tab 时可能需要销毁之前的监听,否则会造成严重的性能问题。

End

Thanks to Bootstrap and tuupola/jquery_lazyload