jquery插件系列之延迟加载
2021-07-16 02:06
标签:自定义 element data length eid window logs 代码 lan 先上代码 本插件使用 typescript 编写, js 请查看 GITHUB 本插件内置两个方法: 1.简单的图片加载。可以参考增加加载动画 给 img 的 src 设置一张 加载动态图片 2.局部加载。依赖 template 函数(参考 art-template) 主要有两个参数 : data-url 请求网址 data-tpl 模板元素id (lazy-loading 为加载动画) 请注意,本插件依赖 jquery jquery插件系列之延迟加载 标签:自定义 element data length eid window logs 代码 lan 原文地址:http://www.cnblogs.com/zodream/p/7071736.htmlenum LazyMode {
once, // 执行一次模式
every //永久执行模式
}
class LazyItem {
constructor(
public element: JQuery,
public callback: Function,
public mode: LazyMode = LazyMode.once,
public diff: number = 0
) {
}
private _lastHeight: number; // 上次执行的高度
/**
* 重新刷新
*/
public refresh() {
this._lastHeight = undefined;
}
/**
* 判断能否执行
* @param height
* @param bottom
*/
public canRun(height: number, bottom: number): boolean {
if (this.mode == LazyMode.once && this._lastHeight) {
return false
}
let top = this.element.offset().top;
return top + this.diff >= height && top bottom;
}
public run(height: number, bottom: number): boolean {
if (this.mode == LazyMode.once && this._lastHeight) {
return false;
}
let top = this.element.offset().top;
if (top + this.diff = bottom) {
return false;
}
this.callback.call(this, this.element);
this._lastHeight = height + this.diff;
return true;
}
}
class Lazy {
constructor(
public element: JQuery,
options?: LazyOptions
) {
this.options = $.extend({}, new LazyDefaultOptions(), options);
let $window = $(window);
let instance = this;
this._init();
$window.scroll(function() {
instance.scrollInvote();
});
// 首次执行
this.scrollInvote();
}
public options: LazyOptions;
private _data: Array
img class="lazy" data-original="1.jpg"/>
$("img.lazy").lazyload({
callback: function($this) {
var img = $this.attr(‘data-original‘);
if (!img) {
return;
}
$("").bind("load", function() {
$this.attr(‘src‘, img);
}).attr(‘src‘, img);
}
});
div class="templateLazy lazy-loading" data-url="1" data-tpl="temp_tpl">
div>
script id="temp_tpl" type="text/template">
div>{{ id }}/div>
script>
$(".templateLazy").lazyload({
callback: function($this) {
var url = $this.attr(‘data-url‘);
var templateId = $this.attr(‘data-tpl‘);
$.getJSON(url, function(data) {
if (data.code != 0) {
return;
}
if (typeof data.data != ‘string‘) {
data.data = template(templateId, data.data);
}
$this.removeClass(‘lazy-loading‘);
$this.html(data.data);
});
}
});
上一篇:MVC应用随笔